Get notified when properties change in the Model

后端 未结 4 857
-上瘾入骨i
-上瘾入骨i 2021-01-27 05:16

There seems to be conflicting thoughts on whether INotifyPropertyChanged should be implemented in the Model or not. I think that it should be implemented in the Vie

4条回答
  •  时光取名叫无心
    2021-01-27 05:54

    ViewModel should definitely implement INotifyPropertyChanged. I don't have a strong opinion on whether it should be implemented in the Model as well. I don't think you need it when the model properties don't change independently from the ViewModel while it is bound to the View.

    Anyway, this is how I'd implement INotifyPropertyChanged in the ViewModel when it is not already implemented in the Model:

    public class PersonViewModel : INotifyPropertyChanged 
    {
        private Person person;
    
        public event PropertyChangedEventHandler PropertyChanged;
    
        private void OnPropertyChanged(string propertyName) 
        {
            if(PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    
        public PersonViewModel(Person person)
        {
            this.person = person;
        }
    
        public int Age
        {
            get { return person.Age; }
            set
            {
                if (value != person.Age)
                {
                    person.Age = value;
                    OnPropertyChanged("Age");
                }
            }
        }
    
        public string FirstName
        {
            get { return person.FirstName; }
            set
            {
                if (value != person.FirstName)
                {
                    person.FirstName = value;
                    OnPropertyChanged("FirstName");
                }
            }
        }
    
        public string LastName
        {
            get { return person.LastName; }
            set
            {
                if (value != person.LastName)
                {
                    person.LastName = value;
                    OnPropertyChanged("LastName");
                }
            }
        }
    }
    

    Seeing how you updated you question, I need to add that without having INotifyPropertyChanged (or a similar custom notification event) implemented in the model, you can't get notified about the changes in the model that happen in it independently from the ViewModel. I guess you should be able to avoid that. Otherwise just implement INotifyPropertyChanged in it. There's nothing wrong with that if you need it.

提交回复
热议问题