我有一个声明性地绑定到文本框的WPF列表框控件。列表框的ItemsSource是一个从XML文件构建的ObservableCollection。添加新项目时,我可以轻松地阻止列表框中的重复条目,因为我可以在“添加”按钮的Click事件处理程序中检查它。
但是,当文本框中的现有项目的值(显然显示列表框的选定项目)更改为列表中已存在的值时,我想阻止它,但我不知道如何。
我很感激你的帮助!
答案 0 :(得分:3)
您可以通过从ValidationRule
派生来创建自己的验证规则,并将其应用于文本框的绑定。在Validate
方法中,您可以检查重复项并返回ValidationResult
false,以防止更新绑定源。
答案 1 :(得分:2)
收听CollectionChanged
事件并检查集合何时被修改,如果有任何重复项并删除它们。
此外,您可以查看this问题及其对可观察集合的回答,该集合还会在其“项目”属性发生变化时通知您。
编辑:
如果您不想使用我上面提到的集合,您可以确保集合的项目实现INotifyPropertyChanged
,并且每次向集合中添加项目时,请听取其PropertyChanged
事件。在处理程序中,检查更改的属性是否是ListBox中显示的属性,并检查是否有任何其他元素具有此属性的相同值。如果找到这样的元素,可以将属性的值更改为旧值,也可以完全删除元素,这取决于应用程序的逻辑。