2010-10-06 2 views
0

J'ai créé deux viewmodel, MyViewModel, MyViewModel2. MyViewModel2 inclut MyViewModel en tant que propriété. MyViewModel inclut une entité MyEntity de EF/WCF Ria Service.Comment capturer l'événement PropertyChanged à partir de ViewModel?

Dans MyViewModel2, je souhaite capturer tous les changements d'éléments dans MyEntity pour la liaison de données. Mon code comme ci-dessous:

public class MyViewModel : ViewModelBase 
{ 
     //.... 
     public MyViewModel(myEntity myEntity) 
      : this() 
     { 
      //.... 
      this._myEntity = myEntity; 
      this._myEntity.PropertyChanged += new PropertyChangedEventHandler(_myEntity_PropertyChanged); 
      this.RaisePropertyChanged("MyEntity"); 
     } 

     void _myEntity_PropertyChanged(object sender, PropertyChangedEventArgs e) 
     {     
      this.RaisePropertyChanged("MyEntity");    
     } 

    private MyEntity _myEntity; 
     public MyEntity MyEntity 
     { 
      get { return this._myEntity; } 
      set 
      { 
       if (value != this._myEntity) 
       { 
        this._myEntity = value; 
        RaisePropertyChanged("MyEntity"); 
       } 
      } 
     } 
} 


public class MyViewModel2 : ViewModelBase 
{  
     public MyViewModel2(){ 
     this._MyViewModel = new MyViewModel(); 
     this._MyViewModel.PropertyChanged += new PropertyChangedEventHandler(_MyViewModel_PropertyChanged); 
     } 

     void _MyViewModel_PropertyChanged(object sender, PropertyChangedEventArgs e) 
     { 
      //do something here.... 
     } 


     private MyViewModel _MyViewModel; 
     public MyViewModel MyViewModel 
     { 
      get { return this._MyViewModel; } 
      set 
      { 
       if (value != this._MyViewModel) 
       { 
        this._MyViewModel = value; 
        RaisePropertyChanged("MyViewModel"); 
       } 
      } 
     } 
} 

puis je lance l'application et modifier des données à MyEntity, mais je ne peux pas capturer l'événement a changé dans MyViewModel2.

Comment résoudre ce problème?

Répondre

0

Modifiez-vous la valeur de myViewModel._myEntity ou myViewModel._myEntity.SomeProperty?

Dans le code que vous avez fourni, MyViewModel déclenche l'événement PropertyChanged uniquement lorsque la valeur du champ '_myEntity' est modifiée, au lieu que la valeur de l'instance 'on' '_myEntity' soit modifiée.

Pour soulever correctement la notification PropertyChange sur _myEntity, vous devez ajouter le code d'invocation d'événement PropertyChanged sous le poseur de propriété de MyEntity, comme par exemple:

public class MyEntity 
{ 
    private string _name; 
    public string Name 
    { 
     get 
     { 
      return this._name; 
     } 
     set 
     { 
      if(value != this._name) 
      { 
        this._name = vaule; 
        this.RaisePropertyChanged("Name"); 
      } 
     } 
} 
Questions connexes