Как я могу выполнить код, когда значение переменной изменяется в C #? - PullRequest
8 голосов
/ 16 июля 2009

Я хочу переключить видимость кнопки при изменении значения конкретной переменной. Есть ли способ присоединить какой-либо делегат к переменной, которая выполняется автоматически при изменении значения?

Ответы [ 5 ]

18 голосов
/ 16 июля 2009

Нет, вы не можете делать такие вещи, как перегрузка оператора присваивания в C #. Лучшее, что вы можете сделать, - это изменить переменную на свойство и вызвать метод или делегировать или вызвать событие в его установщике.

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

Это делается многими средами (например, системой WPF DependencyProperty) для отслеживания изменений свойств.

4 голосов
/ 16 июля 2009
2 голосов
/ 16 июля 2009

Вы также можете использовать привязку данных: в WPF , в Windows Forms . Это позволяет изменять состояние графического интерфейса в зависимости от свойств объектов и наоборот .

1 голос
/ 16 июля 2009

Нет способа сделать это. Переменные - это просто места в памяти, в которые ваше приложение записывает.

Вместо этого используйте свойство:

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

private void MyVariableHasBeenChanged()
{

}
0 голосов
/ 16 июля 2009

У вас либо есть ссылка на графический интерфейс в вашей модели (где переменная), и вы непосредственно выполняете изменение графического интерфейса в методе сеттера, либо вы заставляете свой графический интерфейс наблюдать вашу модель через наблюдателя, и наблюдаемые события запуска модели наблюдателям в сеттерах. Первый из них в конечном итоге приведет к коду спагетти, поскольку вы добавляете все больше и больше прямых связей между моделью и представлением, и, следовательно, должны использоваться только для внутренних инструментов и простых программ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...