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;
}
}