J'ai une matrice bool de taille 4 et je veux lier chaque cellule à un contrôle différent. Ce tableau BOOL représente 4 statuts (false = échec, vrai = succès). Ce tableau BOOL est une propres avec une classe:
Statuses [0] = true;
3 Réponses :
Il ne soulever pas l'événement Becuase Array code> ne peut pas implémenter
inotifypropertychanged code>. Vous pouvez utiliser un conteneur différent de celui de la matrice primitive (tout ce qui implémente
inotifidCollectionChanged code> aimé
Observablecollection
SUPPROPERTYCHANGED ("Status ") code> Chaque fois que vous mettez à jour la matrice Status ou, comme métimée dans une autre réponse, utilisez une classe qui implémente
inotifypropertychanged code> contenant 4 propriétés. P>
Oui, utiliser Observablecollection sera le moyen le plus simple d'aller.
Observablecollection
@DecyClone: Cela notifie si le nième élément de la collection est déplacé, remplacé, etc., ce que le code de l'OP. Vous êtes correct en ce que cela ne gérera pas le cas dans lequel T possède des propriétés et ne met pas en œuvre inotifypropertychanged, mais j'ai considéré cela en dehors de la portée de la question.
vous avez raison. Je n'ai pas réalisé que ce sera une collection de types de valeur (Boolean) et non d'une classe.
Vous ne pouvez pas le faire lors de l'utilisation d'un tableau code> code>. Changer une valeur à n'importe quel index sur un tableau code> ne soulève pas la notification de changement requise par le Pouvez-vous utiliser une classe avec quatre propriétés qui implémentent UI code>. P>
inotifypropertychanged interface code> à la place? p>
Vous devez exposer vos statuts sous forme d'indexeur, puis augmenter un événement de changement de propriété indiquant que l'indexeur a changé.
private bool[] _Statuses; public bool this[int index] { get { return _Statuses[index]; } set { _Statuses[index] = value; if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(Binding.IndexerName)); } }
Vous avez manqué une parenthèse lorsque vous soulevez l'événement de la propriété.