如何在C#中创建一个Observable Hashset?

目前我在WPF应用程序中使用ObservableCollection,该应用程序是Conway生命游戏的一个实现,适用于大约500个单元格,但之后它开始显着减速。 我最初使用HashSet编写应用程序但无法找到将单元格绑定到canvas的任何方法。

有没有办法让我的HashSet通知其绑定对象的更改? 我的Cell类是一个简单的整数X,Y对,如果该对存在,则该单元格是活着的,否则就死了。 Cell实现INotifyPropertyChanged并覆盖GetHashCode和Equals。 我无法让细胞显示任何变化,只是加载后立即出现的细胞。 有没有办法将Hashset绑定到canvas上的项目?

你也必须实现INotifyCollectionChanged ,然后它应该都可以正常工作。 还有另一个相关的SO答案,它使用freezables来确保底层实体的更改也得到处理。

我不知道这是否会有所帮助,但这是我为个人项目制作的“可观察集”的一个非常简单的实现。 它基本上防止插入(或覆盖)已经在集合中的项目。

如果你想,你可以简单地退出方法而不是抛出exception。

public class SetCollection : ObservableCollection { protected override void InsertItem(int index, T item) { if (Contains(item)) throw new ItemExistsException(item); base.InsertItem(index, item); } protected override void SetItem(int index, T item) { int i = IndexOf(item); if (i >= 0 && i != index) throw new ItemExistsException(item); base.SetItem(index, item); } } 

我在这里发布了一个完整的ObservableHashSet,您可以使用它。

https://github.com/BellaCode/Public/tree/master/ObservableHashSet

它基于如何实现ObservableCollection并提供相同的线程安全重入检查。