【发布时间】:2014-01-27 20:16:23
【问题描述】:
我想在 WPF 中进行一些简单的文本框验证,但我刚刚意识到 IDataErrorInfo 依赖于引发 PropertyChanged 事件来触发验证,这意味着在验证发生之前将无效值应用于我的绑定对象。有没有办法改变这一点,以便首先进行验证(并防止绑定无效数据),或者是否有另一种解决方案可以这样工作?
精简后的代码如下所示:
<TextBox>
<TextBox.Text>
<Binding Path="MyProperty" ValidatesOnDataErrors="True" />
</TextBox.Text>
</TextBox>
public class MyViewModel : IDataErrorInfo
{
public string MyProperty
{
get { return _myProperty; }
set
{
if (_myProperty != value)
{
_myProperty = value;
NotifyPropertyChanged(() => MyProperty);
SaveSettings();
}
}
}
public string Error
{
get { return string.Empty; }
}
public string this[string columnName]
{
get
{
if (columnName == "MyProperty")
return "ERROR";
return string.Empty;
}
}
}
【问题讨论】:
-
如果您使用 .net 4.5,请查看此处INotifyDataErrorInfo 和此处Asynchronous validation