Comment créer un hachage observable en C #?

Actuellement, j’utilise une ObservableCollection au sein d’une application WPF. Cette application est une implémentation du jeu de la vie de Conway et fonctionne bien pour environ 500 cellules, mais elle commence ensuite à ralentir considérablement. À l’origine, j’avais écrit l’application à l’aide d’un HashSet, mais je n’ai trouvé aucun moyen de lier les cellules à un canevas.

Existe-t-il un moyen de demander à mon HashSet de notifier son object de liaison des modifications? Ma classe de cellules est une paire entière simple X, Y. Si la paire existe, la cellule est vivante, sinon morte. La cellule implémente INotifyPropertyChanged et substitue GetHashCode et Equals. Je ne pouvais pas afficher de modifications dans la cellule, seules les cellules présentes immédiatement après le chargement. Est-il possible de lier un hachage à des éléments d’un canevas?

Vous devez également implémenter INotifyCollectionChanged , puis tout devrait fonctionner correctement. Il existe une autre réponse SO pertinente qui utilise les éléments gelables pour garantir que les modifications des entités sous-jacentes sont également gérées.

Je ne sais pas si cela aidera, mais voici une implémentation très simple d’un “ensemble observable” que j’ai créé pour un projet personnel. Cela évite essentiellement d’insérer (ou d’écraser avec) un élément qui est déjà dans la collection.

Si vous le souhaitez, vous pouvez simplement sortir des méthodes plutôt que de lancer une 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); } } 

J’ai posté ici un ObservableHashSet complet que vous pouvez utiliser.

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

Il est basé sur une reflection sur la manière dont ObservableCollection est implémenté et fournit les mêmes contrôles de ré-entrée de thread-safety.