WPF如何保证DataGrid中的唯一性
WPF how to ensure uniqueness in DataGrid
我正在构建一个 WPF 应用程序,其中 DataGrid
绑定了 Product
的 HashSet
,两个具有相同 ID 的 Products
被认为是相等的。允许用户向 DataGrid
添加新行来描述新产品,如果两行具有相同的 ID,我想通知用户。但是我如何检测到呢?问题是 DataGrid
绑定到 items
,后者创建为
items = new ObservableCollection<Product>(new HashSet<Product>());
并且重复的产品会自动插入并且永远不会出现在 items
中(尽管它确实出现在 DataGrid
中,为什么?)
简而言之,2 个问题:
- 插入时如何检测重复项?
- 为什么重复出现在 DataGrid 中?
让我先解释一下,为什么这个new ObservableCollection<Product>(new HashSet<Product>());
不起作用。
ObservableCollection 不是哈希集等其他集合的包装器。您的代码 baiscaly 创建哈希集,然后将其项目复制到 ObservableCollection。然后哈希集丢失(收集垃圾),因为没有对它的引用。没有什么可以阻止插入重复的 ID。
插入时如何检测重复项?
如果可能,不要让用户编辑 ID,而是自动为他生成。否则,您需要监听产品集合的 collectionchanged 以确保插入时的唯一性和每个产品的 propertychanged 事件以在编辑 ID 时确保唯一性。
另一种选择是创建自己的 class 继承自 ObservableCollection 和 override InsertItems and SetItems methods
我正在构建一个 WPF 应用程序,其中 DataGrid
绑定了 Product
的 HashSet
,两个具有相同 ID 的 Products
被认为是相等的。允许用户向 DataGrid
添加新行来描述新产品,如果两行具有相同的 ID,我想通知用户。但是我如何检测到呢?问题是 DataGrid
绑定到 items
,后者创建为
items = new ObservableCollection<Product>(new HashSet<Product>());
并且重复的产品会自动插入并且永远不会出现在 items
中(尽管它确实出现在 DataGrid
中,为什么?)
简而言之,2 个问题:
- 插入时如何检测重复项?
- 为什么重复出现在 DataGrid 中?
让我先解释一下,为什么这个new ObservableCollection<Product>(new HashSet<Product>());
不起作用。
ObservableCollection 不是哈希集等其他集合的包装器。您的代码 baiscaly 创建哈希集,然后将其项目复制到 ObservableCollection。然后哈希集丢失(收集垃圾),因为没有对它的引用。没有什么可以阻止插入重复的 ID。
插入时如何检测重复项?
如果可能,不要让用户编辑 ID,而是自动为他生成。否则,您需要监听产品集合的 collectionchanged 以确保插入时的唯一性和每个产品的 propertychanged 事件以在编辑 ID 时确保唯一性。
另一种选择是创建自己的 class 继承自 ObservableCollection 和 override InsertItems and SetItems methods