Как определить метод SetProperty для ViewModel в шаблоне MVVM? Я видел в некоторых примерах, что для этого применяется интерфейс BindingBase, который тоже надо определять.
Мне нужно также определить INotifyPropertyChanged. Не сказать, что понимаю, но знаю, как это сделать. Видел в примерах, что от этого класса наследуют ViewModel, а иногда имплементируют в BindingBase (я сам запутался, так что не стоит слишком вникать в смысл этого предложения).
В данном примере необходим интерфейс INotifyPropertyChanged, чтобы был доступен метод OnPropertyChanged(), а также ещё какой-то интерфейс, чтобы выполнялся метод SetProperty():
public class MyCalendar : BaseViewModel {
// ...
private string _DayName;
public string DayName {
get { return _DayName; }
set {
_DayName = value;
OnPropertyChanged("SelectedDay");
}
}
private bool _IsWorkday;
public bool IsWorkday {
get { return _IsWorkday; }
set { SetProperty(ref _IsWorkday, value); }
}
}
Что следует добавить в класс BaseViewModel, чтобы в классе MyCalendar работал метод SetProperty()?
public class BaseViewModel : INotifyPropertyChanged {
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged([CallerMemberName]string prop = "") {
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(prop));
}
}
abstract class BaseViewModel : INotifyPropertyChanged
{
protected bool SetProperty<T>(ref T field, T value, [CallerMemberName]string propertyName = null)
{
if (EqualityComparer<T>.Default.Equals(field, value))
return false;
field = value;
NotifyPropertyChanged(propertyName);
return true;
}
protected void NotifyPropertyChanged([CallerMemberName] string propertyName = null)
=> PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
public event PropertyChangedEventHandler PropertyChanged;
}
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости