2013-08-28 28 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"); 
     } 
    }