2010-06-20 4 views
0

я реализовал интерфейс INotifyPropertyChanged как это,Как вызвать 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 будет меняться всякий раз, когда изменяется значение в другом текстовом поле. Я сделал привязку динамически, привязка

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

и установка DataContext этого класса как TotalCost. Где я ошибаюсь? Благодаря

ответ

0
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; 
+0

Спасибо за ответ, но до сих пор TotalText не получает обновленный с изменившейся «Total» значения :( – Ramya

+0

я вижу, что событие NotifyPropertyChanged не вызывается. В чем причина? – Ramya

+0

Использование: {return this.total;} в getter и убедитесь, что вы установили DataContext с: this.DataContext = this; - он не установлен по умолчанию – Andy

4

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

this.NotifyPropertyChanged("TotalCost"); 

вам следует называть:

this.NotifyPropertyChanged("Total"); 

Это должно sove проблему.

2

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

получить {возврат всего; }

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

+0

Привет, Спасибо за ответ. Я выполнил сделанные изменения. Но PropertyChanged по-прежнему показывает значение null. Что мне не хватает? – Ramya

+0

+1 Исходный код может вызвать переполнение стека. Похоже, что OP исправил этот бит уже, хотя , –

Смежные вопросы