Skip to content

Instantly share code, notes, and snippets.

@HamidMolareza
Last active June 24, 2024 21:16
Show Gist options
  • Save HamidMolareza/9e2103f9faed5fdcd31da726b6bffe31 to your computer and use it in GitHub Desktop.
Save HamidMolareza/9e2103f9faed5fdcd31da726b6bffe31 to your computer and use it in GitHub Desktop.
Implement INotifyPropertyChanged in C#
using System.ComponentModel;
using System.Runtime.CompilerServices;
var person = new Person {
FirstName = "Hamid"
};
person.PropertyChanged += HandlePersonPropertyChanged;
person.FirstName = "Mohammad";
return;
void HandlePersonPropertyChanged(object sender, PropertyChangedEventArgs e) {
Console.WriteLine($"Property '{e.PropertyName}' changed to '{((Person)sender).FirstName}'");
}
public class Person : INotifyPropertyChanged {
public event PropertyChangedEventHandler? PropertyChanged;
public string? FirstName {
get => _firstName;
set => SetField(ref _firstName, value);
}
private string? _firstName;
private void OnPropertyChanged([CallerMemberName] string? propertyName = null) {
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
private bool SetField<T>(ref T field, T value, [CallerMemberName] string? propertyName = null) {
if (EqualityComparer<T>.Default.Equals(field, value)) return false;
field = value;
OnPropertyChanged(propertyName);
return true;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment