我有一个带有绑定到整数的文本框和一个按钮的表单。现在,当文本框的值无效时,我想立即禁用该按钮。
通常,人们会在 VM 中放置一个 Can() 方法,并在属性的设置器中触发 NotifyOfPropertyChange。但是,如果用户输入一个非数值,例如,文本框无效,但从不调用属性设置器,所以我无法通知/禁用按钮。
那么,当用户输入一个不会导致属性设置器被调用的无效值时,如何禁用该按钮?由于我刚刚开始,我对 CM 的了解有限。
我有一个带有绑定到整数的文本框和一个按钮的表单。现在,当文本框的值无效时,我想立即禁用该按钮。
通常,人们会在 VM 中放置一个 Can() 方法,并在属性的设置器中触发 NotifyOfPropertyChange。但是,如果用户输入一个非数值,例如,文本框无效,但从不调用属性设置器,所以我无法通知/禁用按钮。
那么,当用户输入一个不会导致属性设置器被调用的无效值时,如何禁用该按钮?由于我刚刚开始,我对 CM 的了解有限。
我发现解决此问题的最佳方法是将属性改为字符串,并在属性设置器中进行必要的字符串到整数转换。如果转换无效,则可以将 TextBox 值重置为默认值。这样,您的属性设置器将始终被解雇。
如果您的模型具有整数属性,那么将字符串版本放在视图模型上是有意义的,因为这仅与 UI 真正相关,而不是与业务逻辑相关。
如果您不希望用户能够输入非数字字符,那么您可以使用屏蔽文本框,例如Extended WPF Toolkit中包含的文本框,或第三方控件套件(例如 Telerik 提供的那些)或基础设施。
我会改用 MaskedTextBox 并将掩码设置为仅整数。