gpt4 book ai didi

c# - OnPropertyChange 不触发 IDataErrorInfo.this[]

转载 作者:太空宇宙 更新时间:2023-11-03 10:58:26 25 4
gpt4 key购买 nike

我正在尝试使用 IDataErrorInfo 捕获错误,但绑定(bind)数据中的更改不会触发 IdataErrorInfo.this[]。我相信这是因为我将数据绑定(bind)到文本框的方式。

我的文本框文本绑定(bind)到源如下:

    <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] 的实现。但是,当文本框文本绑定(bind)到字符串类型时,IDataErrorInfo 实现有效。因此,我认为问题是由于源成员的绑定(bind)(Binding LimitsConfiguration.WaypointsMax)引起的,但除了为 LimitsConfiguraton 对象(我宁可不做)。

我是 WPF 的新手,所以任何想法都将不胜感激。

最佳答案

文本框不会监听包含 LimitsConfiguration 属性的类的属性更改事件。相反,它会监听 LimitsConfig 类的属性更改事件,因为这是包含绑定(bind)到文本框的属性的类。

关于c# - OnPropertyChange 不触发 IDataErrorInfo.this[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18577727/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com