Как вызвать INotifyPropertyChanged - PullRequest
0 голосов
/ 20 июня 2010

Я реализовал интерфейс INotifyPropertyChanged следующим образом:

private int total;
public event PropertyChangedEventHandler PropertyChanged;

public void NotifyPropertyChanged(string propertyName)
{
    if (PropertyChanged != null)
    {
        PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    } 
}

public int Total {
    get { return this.Total; } 
    set 
    { 
        if (this.total == value) return; 
        this.total = value;
        this.NotifyPropertyChanged("TotalCost"); 
    } 
}

Я должен привязать значение public int TotalCost к текстовому полю.TotalCost будет меняться всякий раз, когда изменяется значение в каком-либо другом текстовом поле.Я сделал динамическое связывание, Binding

bind = new Binding();
bind.Source = this.DataContext; TotalText.SetBinding(TextBox.TextProperty, bind);

и установил DataContext этого класса как TotalCost.Где я не прав?Спасибо

Ответы [ 3 ]

4 голосов
/ 20 июня 2010

Я думаю, что причина, по которой NotifyPropertyChanged не запускается, заключается в несовпадении имени свойства. Имя открытого свойства должно совпадать со строкой, передаваемой методу NotifyPropertyChanged. Поэтому вместо звонка:

this.NotifyPropertyChanged("TotalCost");

Вы должны звонить:

this.NotifyPropertyChanged("Total"); 

Это должно решить проблему.

2 голосов
/ 21 июня 2010

Разве ваш геттер не должен выглядеть так?

get {return total;}

возможно, оно устанавливается, но получатель не возвращает его ...

0 голосов
/ 20 июня 2010
private int _total=0;
public int Total 
{ 
get 
{ 
    return this._total; 
} 
set { 
    if (this._total == value)  
        return; 
        this._total = value; 
        this.NotifyPropertyChanged("Total"); }  
} 

...

bind = new Binding("DataContext.Total"); 
bind.Source = this; 
bind.Mode = BindingMode.TwoWay;
TotalText.SetBinding(TextBox.TextProperty, bind); 

...

this.DataContext=this;
...