WPF如何确保DataGrid的唯一性

时间:2015-03-25 08:18:07

标签: c# wpf datagrid

我正在构建一个WPF应用,其中DataGrid绑定HashSet Product,并且具有相同ID的两个Products被视为相等。允许用户向DataGrid添加新行以描述新产品,并且我想通知用户两行是否具有相同的ID。但我怎么检测到呢?问题是DataGrid绑定到items,其创建为

items = new ObservableCollection<Product>(new HashSet<Product>());

并且会自动插入重复的商品,并且永远不会在items中结束(虽然它确实显示在DataGrid上,为什么?)

简而言之,有两个问题:

  1. 如何在插入时检测到副本?
  2. 为什么重复显示在DataGrid中?

1 个答案:

答案 0 :(得分:1)

首先让我解释一下,为什么这个new ObservableCollection<Product>(new HashSet<Product>());不起作用。

ObservableCollection不是像hashset这样的其他集合的包装器。你的代码会创建hashset,然后将其项目复制到ObservableCollection。然后丢失哈希集(垃圾收集),因为没有引用它。没有什么可以阻止插入重复的ID。

如何在插入时检测重复?

如果可能,请不要让用户编辑ID,而是为他自动生成ID。否则,您需要收听产品集合的collectionchanged以确保在插入时的唯一性以及每个产品的属性更改事件,以便在编辑ID时获得唯一性。 另一种选择是创建自己的继承自ObservableCollection和override InsertItems and SetItems methods

的类