10
votes

Comment réaliser des fonctionnalités à l'enveloppe d'inofinyPropertyChangies pour les valeurs dans un BOOL []?

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;


0 commentaires

3 Réponses :


3
votes

Il ne soulever pas l'événement Becuase Array ne peut pas implémenter inotifypropertychanged . Vous pouvez utiliser un conteneur différent de celui de la matrice primitive (tout ce qui implémente inotifidCollectionChanged aimé Observablecollection devrait faire) ou vous devez appeler SUPPROPERTYCHANGED ("Status ") 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 contenant 4 propriétés.


4 commentaires

Oui, utiliser Observablecollection sera le moyen le plus simple d'aller.


Observablecollection ne notifie pas lorsqu'une valeur de tout élément à l'intérieur est modifiée.


@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.



1
votes

Vous ne pouvez pas le faire lors de l'utilisation d'un tableau . Changer une valeur à n'importe quel index sur un tableau ne soulève pas la notification de changement requise par le UI .

Pouvez-vous utiliser une classe avec quatre propriétés qui implémentent inotifypropertychanged interface à la place?


0 commentaires

8
votes

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));
    }
}


1 commentaires

Vous avez manqué une parenthèse lorsque vous soulevez l'événement de la propriété.