Essential C# INotifyPropertyChanged interface  Suggest an edit

INotifyPropertyChanged With Generic Set Method

The NotifyPropertyChangedBaseclass below defines a generic Set method that can be called from any derived type.

public class NotifyPropertyChangedBase : INotifyPropertyChanged
    protected void RaisePropertyChanged([CallerMemberName] string propertyName = null) =>
    PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    public event PropertyChangedEventHandler PropertyChanged;

    public virtual bool Set<T>(ref T field, T value, [CallerMemberName] string propertyName = null)
        if (Equals(field, value))
            return false;
        storage = value;
        return true;

To use this generic Set method, you simply need to create a class that derives from NotifyPropertyChangedBase.

public class SomeViewModel : NotifyPropertyChangedBase
    private string _foo;
    private int _bar;

    public string Foo
        get { return _foo; }
        set { Set(ref _foo, value); }

    public int Bar
        get { return _bar; }
        set { Set(ref _bar, value); }

As shown above, you can call Set(ref _fieldName, value); in a property’s setter and it will automatically raise a PropertyChanged event if it is needed.

You can then register to the PropertyChanged event from another class that needs to handle property changes.

public class SomeListener
    public SomeListener()
        _vm = new SomeViewModel();
        _vm.PropertyChanged += OnViewModelPropertyChanged;

    private void OnViewModelPropertyChanged(object sender, PropertyChangedEventArgs e)
        Console.WriteLine($"Property {e.PropertyName} was changed.");

    private readonly SomeViewModel _vm;


Table Of Contents
22 Enum
88 INotifyPropertyChanged interface
107 Stream
108 Timers
  ↑ ↓ to navigate     ↵ to select     Esc to close