WPF如何保证DataGrid中的唯一性

WPF how to ensure uniqueness in DataGrid

我正在构建一个 WPF 应用程序,其中 DataGrid 绑定了 ProductHashSet,两个具有相同 ID 的 Products 被认为是相等的。允许用户向 DataGrid 添加新行来描述新产品,如果两行具有相同的 ID,我想通知用户。但是我如何检测到呢?问题是 DataGrid 绑定到 items,后者创建为

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

并且重复的产品会自动插入并且永远不会出现在 items 中(尽管它确实出现在 DataGrid 中,为什么?)

简而言之,2 个问题:

  1. 插入时如何检测重复项?
  2. 为什么重复出现在 DataGrid 中?

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

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

插入时如何检测重复项?

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