WPF&MVVM: как определить метод SetProperty для ViewModel?

215
06 октября 2017, 14:25

Как определить метод 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));
    }
}
Answer 1
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;
}
READ ALSO
Java типы, допускающие NULL значения

Java типы, допускающие NULL значения

Существуют ли в Java что-то вроде типов, допускающих NULL значения? То есть с сервера приходит, на пример, int, но вместо него может прийти NULL В C#можно...

219
поключение к базу данных c# mvc asp.net [требует правки]

поключение к базу данных c# mvc asp.net [требует правки]

ЗдравствуйтеЯ создал чат по интрукции https://metanit

246
Помогите поправить алгоритм на C#

Помогите поправить алгоритм на C#

Здравствуйте! Я недавно начал изучать C#Помогите, пожалуйста, поправить алгоритм

241
Как можно обрезать строку?

Как можно обрезать строку?

Допустим есть строка в listBox "UserFIrstName UserLastName 21993842"Как обрезать эту строку, чтобы осталось "UserFIrstName" или "UserFIrstName UserLastName"?

288