【发布时间】:2012-08-15 22:03:48
【问题描述】:
我正在尝试在 WPF 中实现验证,但遇到了一个问题,即验证失败后我无法单击或更改文本框的值。
我有一个 User 类(它实现了 IDataErrorInfo),它包含以下相关代码:
public virtual string Error
{
get
{
return null;
}
}
public virtual string this[string name]
{
get
{
string result = null;
if (name == "uFirstName")
{
if (String.IsNullOrEmpty(this.uFirstName))
{
return "Must enter a first name!";
}
}
return result;
}
}
然后,在我的 MainWindow 代码隐藏中,我有这个代码来连接我的组合框:
comboBox1.ItemsSource = Users; //Users is a collection of Users
最后,在我的 MainWindow xaml 中,我有这个:
<ComboBox Name="comboBox1" ItemTemplate="{StaticResource userTemplate}" />
<TextBox Name="textBox1" DataContext="{Binding ElementName=comboBox1,
Path=SelectedItem}" Text="{Binding Path=uFirstName, ValidatesOnDataErrors=True,
NotifyOnValidationError=True}"/>
确实,当我删除文本并且文本框获得漂亮的红色边框时,验证确实会触发。但是,更改仍会发送回用户(uFirstName 被设置为空!)。更糟糕的是,我现在无法编辑该文本框中的值除非我将其返回。
需要什么来确保如果值无效则不发回,如果无效则允许编辑文本框?
【问题讨论】:
标签: c# wpf validation binding