Как получить привязки для обновления при изменении значения? - PullRequest
0 голосов
/ 02 января 2012

Я пытаюсь понять привязку WPF. Столь же просто, как это получается:

У меня есть ClassWithProperty, у которого есть открытый uint Prop1.

Главное окно имеет открытый объект ClassWithProp и использует его для контекста данных. Это устанавливается в главном конструкторе Windows:

this.ClassWithProp = new ClassWithProp();
this.DataContext = this.ClassWithProp;

Конструктор ClassWithProp по умолчанию устанавливает значение Porp1 равным 1.

Главное окно содержит метку:

<Label Content="{Binding Prop1}" ...  />

Он также содержит кнопку, которая при нажатии устанавливает ClassWithProp.Prop1 в 2.

Когда окно появляется впервые, метка правильно показывает 1. При нажатии кнопки значение свойства изменяется на 2, но метка не обновляется.

Извините - вероятно, очевидно, но я новичок в WPF:

Почему связанная метка не обновляется при изменении независящего свойства?

Ответы [ 2 ]

2 голосов
/ 02 января 2012

Ваш ClassWithProperty должен реализовать интерфейс INotifyPropertyChanged (который содержит только одно событие PropertyChanged ), таким образом подсистема привязки WPF может прослушивать изменения свойств иобновить значение.Когда вы изменили значение свойства, вы вызываете событие.

Вот пример:

pulic class ClassWithProperty : INotifyPropertyChanged
{
    public uint Prop1
    {
        get { return _prop1; }
        set 
        {
            _prop1 = value;
            OnPropertyChanged("Prop1");
        }
    }

    protected void OnPropertyChanged(string propertyName)
    {
        if (this.PropertyChanged != null)
            this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }

    public event PropertyChangedEventHandler PropertyChanged;


    private uint _prop1;
}
2 голосов
/ 02 января 2012

Реализация INPC.

Также прочитайте обзор , он, вероятно, отвечает на более чем 90% вопросов, связанных с привязкой данных.

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