目前,我正在WPF应用程序中使用ObservableCollection,该应用程序是Conway的生命游戏的实现,并且在大约500个单元格上运行良好,但之后它开始显着减慢。我最初使用HashSet编写应用程序,但找不到任何将单元格绑定到画布的方法。
有没有办法让我的HashSet通知它的绑定对象的变化?我的Cell类是一个简单的整数X,Y对,如果该对存在,则细胞是活的,否则是死的。Cell实现INotifyPropertyChanged并覆盖GetHashCode和Equals。我无法让单元格显示任何更改,只能显示加载后立即出现的单元格。有没有办法将散列集绑定到画布上的项目?
4条答案
按热度按时间zu0ti5jz1#
我不知道这是否有帮助,但这里有一个我为个人项目制作的“可观察集”的简单实现。它本质上防止插入(或插入)集合中已经存在的项。
如果你愿意,你可以简单地从方法中返回,而不是抛出异常。
bxgwgixi2#
你还必须实现INotifyCollectionChanged,然后它应该都能正常工作。还有另一个相关的SO答案,uses freezables确保底层实体中的更改也得到处理。
efzxgjgh3#
我在这里发布了一个完整的ObservableHashSet,你可以使用。
https://github.com/BellaCode/Public/tree/master/ObservableHashSet
它基于对ObservableCollection如何实现的反思,并提供相同的线程安全可重入性检查。
xcitsw884#
或者你可以从
EntityFramework Core
那里偷https://github.com/dotnet/efcore/blob/main/src/EFCore/ChangeTracking/ObservableHashSet.cs