如何防止WPF列表框控件中的重复?

时间:2009-11-16 11:39:35

标签: wpf listbox duplicates

我有一个声明性地绑定到文本框的WPF列表框控件。列表框的ItemsSource是一个从XML文件构建的ObservableCollection。添加新项目时,我可以轻松地阻止列表框中的重复条目,因为我可以在“添加”按钮的Click事件处理程序中检查它。

但是,当文本框中的现有项目的值(显然显示列表框的选定项目)更改为列表中已存在的值时,我想阻止它,但我不知道如何。

我很感激你的帮助!

2 个答案:

答案 0 :(得分:3)

您可以通过从ValidationRule派生来创建自己的验证规则,并将其应用于文本框的绑定。在Validate方法中,您可以检查重复项并返回ValidationResult false,以防止更新绑定源。

答案 1 :(得分:2)

收听CollectionChanged事件并检查集合何时被修改,如果有任何重复项并删除它们。

此外,您可以查看this问题及其对可观察集合的回答,该集合还会在其“项目”属性发生变化时通知您。

编辑:

如果您不想使用我上面提到的集合,您可以确保集合的项目实现INotifyPropertyChanged,并且每次向集合中添加项目时,请听取其PropertyChanged事件。在处理程序中,检查更改的属性是否是ListBox中显示的属性,并检查是否有任何其他元素具有此属性的相同值。如果找到这样的元素,可以将属性的值更改为旧值,也可以完全删除元素,这取决于应用程序的逻辑。