wpf validation textbox idataerrorinfo

¿Cómo usar IDataErrorInfo.Error en un programa WPF?



validation textbox (2)

Tengo un objeto como ese:

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; } } }

Es fácil vincular las propiedades PersonName y Age:

<TextBox Text="{Binding PersonName, ValidatesOnDataErrors=True}" /> <TextBox Text="{Binding Age, ValidatesOnDataErrors=True}" />

Sin embargo, ¿cómo puedo usar la propiedad Error y mostrarla correctamente?


Aquí hay un ejemplo, adaptado de esta pregunta , que muestra cómo mostrar el error en Tooltip:

<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>


Debe modificar el estilo de TextBox para que muestre lo que está mal con la propiedad. Aquí hay un ejemplo simple que muestra el error como información sobre herramientas:

<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>

Simplemente colóquelo dentro de Application.Resources de su archivo app.xaml y se aplicará a cada cuadro de texto de su aplicación:

<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>