2013-08-28 60 views
1

Relativly新來的MVVM的東西,我有以下故障:MVVM綁定,對象屬性改變的通知

我有一個對象的「用戶」,這個對象暴露了一些屬性,如用戶名,電子郵件等。 在MVVM模式,我有一個屬性:

private IUser currentUser; 
    public IUser CurrentUser 
    { 
     get 
     { 
      return this.currentUser; 
     } 
     set 
     { 
      this.currentUser = value; 
      this.OnPropertyChanged("CurrentUser"); 
     } 
    } 

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

在XAML一個TextBox勢必如下:

Text="{Binding CurrentUser.Email, Mode=TwoWay}" 

當改變的電子郵件地址OnPropertyCh老年人不會被解僱,因此其他代碼(如ICommands)不會「工作」。

有沒有一種方法,當用戶在文本框的OnPropertyChanged大火改變了文本?

TIA, 保羅

+0

你的屬性更改通知當您將CurrentUser屬性更改爲某個其他用戶時會被觸發。除非你已經在IUser上實現了INotifyPropertyChanged,否則當你改變IUser的個人屬性時它將不起作用,這似乎與你的觀察相符。 – Gishu

回答

3

你射擊的PropertyChanged當CurrentUser變化,但當前用戶是不會改變你只是改變它的電子郵件屬性。快速修復可能是讓電子郵件屬性傳播CurrentUser的OnChange事件。

public string Email 
{ 
    //get 
    set 
    { 
     this.email = value; 
     this.OnPropertyChanged("CurrentUser"); 
    } 
} 

其實我覺得this.OnPropertyChanged("Email")將工作太,但CurrentUser的設置器,當你改變它的性質絕對不獲取調用。

2

哪裏是你的INotifyPropertyChanged接口? 我認爲這是必要的。

2

屬性更改通知不看你的IUSER類的屬性。 它只是觀察對ViewModel屬性CurrentUser(參考)的更改。

你需要

一)使IUSER執行INotifyPropertyChanged

B)拉出EmailAddress的,並把它添加到視圖模型,像這樣:

public string Email 
    { 
     get 
     { 
      return this.CurrentUser.Email; 
     } 
     set 
     { 
      this.CurrentUser.Email = value; 
      this.OnPropertyChanged("Email"); 
     } 
    }