C#/WPF: PropertyChanged for all Properties in ViewModel?

前端 未结 2 802
野性不改
野性不改 2020-12-08 12:55

I\'ve a class like this:

public class PersonViewModel : ViewModelBase //Here is the INotifyPropertyChanged Stuff
{
    public PersonViewModel(Person person)
         


        
相关标签:
2条回答
  • 2020-12-08 13:30

    You can indicate all properties have changed by using null or string.Empty for the property name in PropertyChangedEventArgs. This is mentioned in the documentation for PropertyChanged.

    0 讨论(0)
  • 2020-12-08 13:39

    One other solution I used to tackle the problem of: first setting the value and then calling the PropertyChangedEventArgs is by adding a Set function in my ViewModelBase which looks like this:

    public class ViewModelBase : INotifyPropertyChanged
    {
        protected bool Set<T>(ref T backingField, T value, [CallerMemberName] string propertyname = null)
        {
            // Check if the value and backing field are actualy different
            if (EqualityComparer<T>.Default.Equals(backingField, value))
            {
                return false;
            }
    
            // Setting the backing field and the RaisePropertyChanged
            backingField = value;
            RaisePropertyChanged(propertyname);
            return true;
       }
    }
    

    Instead of doing this:

    public string Name { 
        get { return PersonEntity.Name; }
        set { PersonEntity.Name = value; RaisePropertyChanged("Name");
    } 
    

    You can now achieve the same by doing this:

    public string Name { 
        get { return PersonEntity.Name; }
        set { Set(ref PersonEntity.Name,value);
    } 
    
    0 讨论(0)
提交回复
热议问题