Caliburn Micro:在表单验证错误时禁用按钮

发布于 2024-10-23 22:18:32 字数 246 浏览 4 评论 0原文

我有一个表单,其中一个文本框绑定到一个整数,还有一个按钮。现在,当文本框的值无效时,我想立即禁用该按钮。

通常,我们会在 VM 中放置 Can() 方法,并在属性的 setter 中触发 NotifyOfPropertyChange。但是,如果用户输入非数字值,则文本框无效,但属性设置器永远不会被调用,因此我无法通知/禁用按钮。

那么,当用户输入不会导致调用属性设置器的无效值时,如何禁用该按钮?由于我刚刚开始接触CM,所以对CM 的了解有限。

I have a form with a textbox bound to an integer, and a button. Now, when the value of the textbox is invalid, I want to immediately disable the button.

Normally, one would put a Can() method in the VM, and trigger a NotifyOfPropertyChange in the property's setter. However, if the user inputs a non numeric value for example, the textbox is invalid, but the property setter is never called, so I can't notify/disable the button.

So, how do I disable the button, when the user inputs an invalid value that doesn't cause the property setter to get called? My knowledge of CM is limited as I've just started out.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

高速公鹿 2024-10-30 22:18:32

我发现解决此问题的最佳方法是将属性设置为字符串,并在属性设置器中执行必要的字符串到整数转换。如果转换无效,则可以将 TextBox 值重置为默认值。这样你的财产设置者总是会被解雇。

如果您的模型具有整数属性,那么将字符串版本放在视图模型上是有意义的,因为这仅与 UI 真正相关,而不是与业务逻辑相关。

如果您不希望用户能够输入非数字字符,则可以使用屏蔽文本框,例如 扩展 WPF 工具包,或第三方控制套件,例如由 Telerik 或 Infragistics 提供的套件。

I've found the best approach to this problem is to make the property a string instead and do the necessary string to integer conversion in your property setter. If the conversion is invalid, then you could reset the TextBox value to a default value. This way your property setter will always get fired.

If your model has an integer property, then it makes sense to place the string version on the view model, as this is only really related to the UI, rather than business logic.

If you don't wish the user to be able to input non digit characters, then you can use a masked text box, such as the one included in the Extended WPF Toolkit, or in a third party control suite such as those offered by Telerik or Infragistics.

ぃ弥猫深巷。 2024-10-30 22:18:32

我将使用 MaskedTextBox 并将掩码仅设置为整数。

I'd use a MaskedTextBox instead and set the mask to integer only.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文