using System.ComponentModel; using System.Runtime.CompilerServices; namespace Pf2e.WPF; /// /// Базовый класс для ViewModel, реализующий INotifyPropertyChanged. /// internal abstract class ViewModelBase : INotifyPropertyChanged { /// /// Событие, возникающее при изменении свойства. /// public event PropertyChangedEventHandler? PropertyChanged; /// /// Вызывает событие PropertyChanged для указанного свойства. /// /// Название свойства (заполняется автоматически). protected virtual void OnPropertyChanged([CallerMemberName] string? propertyName = null) { PropertyChanged?.Invoke(this, new(propertyName)); } /// /// Устанавливает значение поля и вызывает событие PropertyChanged, если значение изменилось. /// /// Тип поля. /// Поле, которое нужно установить. /// Значение, которое нужно установить. /// Название свойства (заполняется автоматически). /// Истина, если значение изменилось, иначе ложь. protected bool SetField(ref T field, T value, [CallerMemberName] string? propertyName = null) { if (EqualityComparer.Default.Equals(field, value)) return false; field = value; OnPropertyChanged(propertyName); return true; } }