如何在WPF程序中使用IDataErrorInfo.Error?
我有一个这样的物体:如何在WPF程序中使用IDataErrorInfo.Error?,wpf,validation,textbox,idataerrorinfo,Wpf,Validation,Textbox,Idataerrorinfo,我有一个这样的物体: public class Person : IDataErrorInfo { public string PersonName{get;set;} public int Age{get;set;} string IDataErrorInfo.this[string propertyName] { get { if(propertyName=="PersonName")
public class Person : IDataErrorInfo
{
public string PersonName{get;set;}
public int Age{get;set;}
string IDataErrorInfo.this[string propertyName]
{
get
{
if(propertyName=="PersonName")
{
if(PersonName.Length>30 || PersonName.Length<1)
{
return "Name is required and less than 30 characters.";
}
}
return null;
}
}
string IDataErrorInfo.Error
{
get
{
if(PersonName=="Tom" && Age!=30)
{
return "Tom must be 30.";
}
return null;
}
}
}
公共类人员:IDataErrorInfo
{
公共字符串PersonName{get;set;}
公共整数{get;set;}
字符串IDataErrorInfo。此[string propertyName]
{
得到
{
如果(propertyName==“PersonName”)
{
如果(PersonName.Length>30 | | PersonName.Length,下面是一个改编自的示例,它显示了如何在工具提示中显示错误:
<TextBox>
<TextBox.Style>
<Style TargetType="{x:Type TextBox}">
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="true">
<Setter Property="ToolTip"
Value="{Binding RelativeSource={RelativeSource Self},
Path=(Validation.Errors)[0].ErrorContent}"/>
</Trigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
您应该修改文本框样式,以便它显示属性的错误。下面是一个简单的示例,将错误显示为工具提示:
<Style TargetType="TextBox">
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="true">
<Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self},
Path=(Validation.Errors).CurrentItem.ErrorContent}" />
</Trigger>
</Style.Triggers>
</Style>
只需将它放在app.xaml文件中的Application.Resources中,它将应用于应用程序的每个文本框:
<Application.Resources>
<Style TargetType="TextBox">
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="true">
<Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self},
Path=(Validation.Errors).CurrentItem.ErrorContent}" />
</Trigger>
</Style.Triggers>
</Style>
</Application.Resources>
Hi,我在IDataErrorInfo.Error.get上设置了一个断点,但它从未被触发。怎么了?@jgg-在这种情况下,错误
get可能不会被调用。IDataErrorInfo.this
get会被调用,并且会被传递到“PersonName”
和“Age”
。因此您需要处理这两个属性,但现在只处理前者。我最终找到了一个解决方法,并发表了一篇文章。Error属性在WPF中没有真正使用。您甚至可以在其中抛出NotImplementedException。IDataErrorInfo被WPF使用“因为它已经存在”,但仅用于this[]部分。我认为这不是WPF中最漂亮的一个角落。@Robin,你可以发布这个问题的答案。这已经有3-4年了,没有公认的答案;)
<Application.Resources>
<Style TargetType="TextBox">
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="true">
<Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self},
Path=(Validation.Errors).CurrentItem.ErrorContent}" />
</Trigger>
</Style.Triggers>
</Style>
</Application.Resources>