开发者

How to capture PropertyChanged event from ViewModel?

I created two viewmodel, MyViewModel, MyViewModel2. MyViewModel2 include MyViewModel as property. MyViewModel include one entity MyEntity from EF/WCF Ria Service.

In MyViewModel2, I want to capture any item changes in MyEntity for databin开发者_StackOverflow中文版ding. My code like below:

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

then I run the app and change data in MyEntity, but I can't capture the changed event in MyViewModel2.

How to resolve this problem?


Are you changing the value of myViewModel._myEntity or myViewModel._myEntity.SomeProperty?

In the code you provided, MyViewModel raises PropertyChanged event only on field '_myEntity' value changed, instead of the value 'on' '_myEntity' instance changed.

To properly raise PropertyChange notification on _myEntity, you should add the PropertyChanged event invocation code beneath the property setter of MyEntity, such like:

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜