我正在尝试使用IDataErrorInfo捕获错误,但是绑定数据中的更改不会触发IdataErrorInfo.this []。我认为这是由于我将数据绑定到文本框的方式。
我的文本框文本绑定到源,如下所示:
<TextBox Grid.Row="0" Grid.Column="1" Margin="8 0 0 0"
Text="{Binding LimitsConfiguration.ThisItemMax, Mode=TwoWay, ValidatesOnDataErrors=True, NotifyOnValidationError=True}"
Style="{StaticResource ValidatableTextBoxStyle}"
HorizontalAlignment="Left" Width="40" Height="25" VerticalAlignment="Bottom" />
StaticResource由以下方式定义:
<Style x:Key="ValidatableTextBoxStyle" TargetType="TextBox">
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="true">
<Setter Property="ToolTip" Value="{Binding RelativeSource={x:Static RelativeSource.Self}, Path=(Validation.Errors).CurrentItem.ErrorContent}" />
</Trigger>
</Style.Triggers>
</Style>
源定义如下。请注意,他的对象不是在同一名称空间中创建的,并且在其中定义了大约9个不同的字符串成员。
public LimitsConfig LimitsConfiguration
{
get { return _limitsConfiguration; }
set
{
_limitsConfiguration = value;
OnPropertyChanged("LimitsConfiguration");
}
}
我的IDataErrorInfo.this []实现如下:
string IDataErrorInfo.this[string propertyName]
{
get
{
string result = String.Empty;
string limitsErrorMsg = "Enter a numeric value for ";
int i;
if (propertyName == "LimitsConfiguration")
{
if (propertyName == LimitsConfiguration.ThisItemMax.ToString())
{
string msg = limitsErrorMsg + "Max Itmes";
string field = LimitsConfiguration.ThisItemMax.ToString();
result = ValidateLimit(field, msg);
}
}
return result;
}
}
永远不会实现IDataInfo.this [string propertyName]的实现。但是,当文本框文本绑定到字符串类型时,IDataErrorInfo实现起作用。因此,我认为问题是由于源成员的绑定(Binding LimitsConfiguration.WaypointsMax)引起的,但是除了为LimitsConfiguraton对象中的所有项目创建公共成员外,我不确定如何解决它宁愿不做)。
我是WPF的新手,所以任何想法都会受到赞赏。
最佳答案
文本框不会在包含LimitsConfiguration
属性的类上侦听属性更改的事件。相反,它侦听LimitsConfig
类的属性更改事件,因为这是包含绑定到文本框的属性的类。
关于c# - OnPropertyChange不触发IDataErrorInfo.this [],我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18577727/