zcbot/windows-node/Zcbot.WindowsNode/Presentation/Infrastructure/ObservableObject.cs

27 lines
739 B
C#

using System.ComponentModel;
using System.Runtime.CompilerServices;
namespace Zcbot.WindowsNode;
internal abstract class ObservableObject : INotifyPropertyChanged
{
public event PropertyChangedEventHandler? PropertyChanged;
protected bool SetProperty<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;
}
protected void OnPropertyChanged([CallerMemberName] string? propertyName = null) =>
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}