【发布时间】:2012-02-28 23:05:19
【问题描述】:
这是场景。我在 UI 上有一个绑定到双重属性的文本框。如果在文本框中键入了一个字符,比如“#”,则 WPF 验证对于应用程序来说是不够的。我需要显示自定义消息并禁用代码中的一些控件。 (这些要禁用的控件不是 xaml 的一部分。)到目前为止,我能想到的唯一方法是将文本框绑定到字符串属性并使用 TryParse 方法。然而,这将是一个巨大的不便。有没有办法得到输入无效字符的通知,而不必将属性更改为字符串类型?
【问题讨论】:
这是场景。我在 UI 上有一个绑定到双重属性的文本框。如果在文本框中键入了一个字符,比如“#”,则 WPF 验证对于应用程序来说是不够的。我需要显示自定义消息并禁用代码中的一些控件。 (这些要禁用的控件不是 xaml 的一部分。)到目前为止,我能想到的唯一方法是将文本框绑定到字符串属性并使用 TryParse 方法。然而,这将是一个巨大的不便。有没有办法得到输入无效字符的通知,而不必将属性更改为字符串类型?
【问题讨论】:
我在我的视图模型中使用“字符串”解决方案。最适合 IDataErrorInfo 和绑定。
但有时我也会为我的 Textboxe 使用 InputMaskbehavior。所以用户可以只输入为 inputmask 定义的字符。
【讨论】:
如果您使用的是 MVVM 模式,那么您可能应该在 ViewModel 中有一个字符串属性,因为这是在文本框中输入的内容。即使您的模型需要双精度,您的视图上也有一个字符串。然后,您可以对字符串属性进行所需的任何验证。比如:
public string TextProperty
{
get
{
return _textProperty;
}
set
{
if (_textProperty != value)
{
_doubleProperty = this.TransformAndValidateString(value);
_textProperty = value;
}
}
}
关于在出现错误时禁用控件,请看这里:
【讨论】: