public class Person : INotifyPropertyChanged { private string name; public string Name { get => name; set { if (name != value) { name = value; OnPropertyChanged(nameof(Name)); } } } public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged(string propertyName) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } }
public class ViewModel : INotifyPropertyChanged { private readonly Model model; public ViewModel(Model model) { this.model = model; this.model.PropertyChanged += OnModelPropertyChanged; } public string Name => model.Name; public event PropertyChangedEventHandler PropertyChanged; private void OnModelPropertyChanged(object sender, PropertyChangedEventArgs e) { if (e.PropertyName == nameof(Model.Name)) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Name))); } } }This is an example of a view model that wraps a model that implements `INotifyPropertyChanged`. It subscribes to the model's `PropertyChanged` event and raises its own `PropertyChanged` event whenever the model's `Name` property changes. The package library for `INotifyPropertyChanged` is `System.ComponentModel`.