8
votes

Comment puis-je exécuter du code lorsque la valeur d'une variable changements dans C #?

Je veux basculer la visibilité d'une touche lorsque la valeur d'une variable particulière change. Existe-t-il un moyen d'attacher une sorte de délégué à une variable qui s'exécute automatiquement lorsque la valeur change?


0 commentaires

5 Réponses :


18
votes

Non, vous ne pouvez pas faire des choses comme surcharger l'opérateur d'affectation en C #. Le mieux que vous puissiez faire est de modifier la variable à une propriété et d'appeler une méthode ou une déléguée ou d'élever un événement dans son séchoir.

private string field;
public string Field {
   get { return field; }
   set { 
       if (field != value) {
           field = value;
           Notify();
       } 
   }
}


1 commentaires

Une excellente technique courante pour ce faire est l'interface inotifyproperTychanged .



1
votes

Il n'y a aucun moyen de le faire. Les variables sont fondamentalement des endroits en mémoire que votre application écrit à.

Utilisez une propriété à la place: P>

string myVariable;
public string MyVariable
{
    get
    {
        return myVariable;
    }
    set
    {
        myVariable = value;
        MyVariableHasBeenChanged();
    }
}

private void MyVariableHasBeenChanged()
{

}


2 commentaires

Juste une petite observation, il serait préférable d'avoir votre appel à "myvariaLhasbeenchangned" après l'avoir changé. De cette façon, vous pouvez faire quelque chose avec elle dans la méthode et vous faites face au cas d'une exception étant lancée dans la mission.


Certainement mieux (et probablement le seul moyen utile). Merci.



0
votes

Vous avez une référence à l'interface graphique dans votre modèle (où la variable est) et effectuez directement le changement d'interface graphique dans la méthode du setter, ou vous rendez votre interface graphique à observer votre modèle via un observateur et que vous disposez des événements d'incendie de modèle observables. aux observateurs des setters. Les premiers conduiront à un code Spaghetti éventuellement, lorsque vous ajoutez de plus en plus de liens directs entre le modèle et la visualisation, et ne doivent donc être utilisés que pour les outils internes et les programmes simples.


0 commentaires

4
votes

3 commentaires

Pouvez-vous justifier le vote négatif s'il vous plaît, pour le modèle d'observateur comme solution à ce problème?


Vous êtes correct et l'électeur bas devrait suspendre leur tête. Dans sa forme la plus simple, un observateur est le schéma correct, c'est en effet ce que WPF utilise, d'où la nécessité de dire également WPF 'Qu'est-ce qui a changé. Je vais +1 vous pour réparer.


Downvote parce que c'est une réponse uniquement liée, je soupçonne.



2
votes

Vous pouvez également utiliser une liaison de données: dans WPF , dans Formulaires Windows . Cela vous permet de modifier l'état d'interface graphique en fonction des propriétés des objets et de vice versa . .


0 commentaires