我正在构建一个WPF应用,其中DataGrid
绑定HashSet
Product
,并且具有相同ID的两个Products
被视为相等。允许用户向DataGrid
添加新行以描述新产品,并且我想通知用户两行是否具有相同的ID。但我怎么检测到呢?问题是DataGrid
绑定到items
,其创建为
items = new ObservableCollection<Product>(new HashSet<Product>());
并且会自动插入重复的商品,并且永远不会在items
中结束(虽然它确实显示在DataGrid
上,为什么?)
简而言之,有两个问题:
答案 0 :(得分:1)
首先让我解释一下,为什么这个new ObservableCollection<Product>(new HashSet<Product>());
不起作用。
ObservableCollection不是像hashset这样的其他集合的包装器。你的代码会创建hashset,然后将其项目复制到ObservableCollection。然后丢失哈希集(垃圾收集),因为没有引用它。没有什么可以阻止插入重复的ID。
如何在插入时检测重复?
如果可能,请不要让用户编辑ID,而是为他自动生成ID。否则,您需要收听产品集合的collectionchanged以确保在插入时的唯一性以及每个产品的属性更改事件,以便在编辑ID时获得唯一性。
另一种选择是创建自己的继承自ObservableCollection和override InsertItems and SetItems methods