wpf 如何在C#中创建Observable Hashset?

mv1qrgav  于 2023-10-22  发布在  C#
关注(0)|答案(4)|浏览(116)

目前,我正在WPF应用程序中使用ObservableCollection,该应用程序是Conway的生命游戏的实现,并且在大约500个单元格上运行良好,但之后它开始显着减慢。我最初使用HashSet编写应用程序,但找不到任何将单元格绑定到画布的方法。
有没有办法让我的HashSet通知它的绑定对象的变化?我的Cell类是一个简单的整数X,Y对,如果该对存在,则细胞是活的,否则是死的。Cell实现INotifyPropertyChanged并覆盖GetHashCode和Equals。我无法让单元格显示任何更改,只能显示加载后立即出现的单元格。有没有办法将散列集绑定到画布上的项目?

zu0ti5jz

zu0ti5jz1#

我不知道这是否有帮助,但这里有一个我为个人项目制作的“可观察集”的简单实现。它本质上防止插入(或插入)集合中已经存在的项。
如果你愿意,你可以简单地从方法中返回,而不是抛出异常。

public class SetCollection<T> : ObservableCollection<T> 
{
    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);
    }
}
bxgwgixi

bxgwgixi2#

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

efzxgjgh

efzxgjgh3#

我在这里发布了一个完整的ObservableHashSet,你可以使用。
https://github.com/BellaCode/Public/tree/master/ObservableHashSet
它基于对ObservableCollection如何实现的反思,并提供相同的线程安全可重入性检查。

相关问题