Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在WPF中手动验证控件_Wpf_Validation_Dataset - Fatal编程技术网

在WPF中手动验证控件

在WPF中手动验证控件,wpf,validation,dataset,Wpf,Validation,Dataset,情况如下: 我有一个绑定到WPF窗口的数据集。数据集实现IDataErrorInfo,因此当窗口中的值发生更改时,将对更改的特定属性进行验证。 在验证期间,我可能会发现窗口中还有另一个控件需要验证。 我只知道数据集中需要验证的字段名,而不知道绑定到此字段的实际控件。 因此,我的问题是: 1.如何找出哪些控件绑定到数据集中的特定字段? 2.如何通过代码触发该控件的验证 谢谢 在我看来有两个选择: 我认为处理这种情况的一种方法是在已更改属性的setter中,清除不再有效的属性(如果它现在确实无效)

情况如下: 我有一个绑定到WPF窗口的数据集。数据集实现IDataErrorInfo,因此当窗口中的值发生更改时,将对更改的特定属性进行验证。 在验证期间,我可能会发现窗口中还有另一个控件需要验证。 我只知道数据集中需要验证的字段名,而不知道绑定到此字段的实际控件。 因此,我的问题是: 1.如何找出哪些控件绑定到数据集中的特定字段? 2.如何通过代码触发该控件的验证


谢谢

在我看来有两个选择:

  • 我认为处理这种情况的一种方法是在已更改属性的setter中,清除不再有效的属性(如果它现在确实无效)
  • 另一个技巧可能是在第一个属性的setter中,在第二个属性上引发一个
    PropertyChanged
    事件,以强制视图重新评估它

  • 我更喜欢第一个选项,因为您知道更改第一个属性有可能使另一个属性无效。

    您的意思是,在更改和验证一个属性时,另一个到目前为止还可以的属性现在无效,需要重新验证吗?是的。第一个属性中的更改导致另一个属性无效。例如,一个属性保存汽车类型,另一个属性存储汽车的汽油类型。当从柴油车更改为汽油车时,气体类型将变得无效(当然,这可以通过使用事件轻松解决,但这是一个非常简单的示例)。我更喜欢2dn选项,但当我只知道数据集中字段的名称时,如何引发PropertyChanged事件?我需要找出哪个属性绑定到此字段。从
    GasType
    属性的setter中,提出一个
    OnPropertyChanged(“CarType”)
    。我可能缺少一些内容。好的,OnPropertyChanged是一个WPF方法。数据模型是数据集。如何从数据集中调用OnPropertyChanged?我指的是您自己的
    OnPropertyChanged
    实现,您可能已经实现了它,作为
    INotifyPropertyChanged
    实现的一部分-简而言之,我指的是您为其他属性引发
    PropertyChanged
    事件。@aviapp。嘿,谢谢你的解决方案——它帮了我很多忙:)