Я немного путаюсь с использованием класса BindableBase и как применить этот «новый» механизм к классическому дизайну MVVM.Использование BindableBase в классическом дизайне MVVM
Вкратце, вопрос в следующем: как правильно использовать класс BindableBase, когда мы ссылаемся на модель в нашем классе модели представления?
Детали:
Классическая модель MVVM: Просмотр < -> View-модель -> Модель
Как мы видим View-модель в этой схеме знает о модели, но модель ничего не знает о View и View-модель.
Если мы реализуем этот подход, мы будем иметь что-то вроде этого: изображения
// Model
class Task
{...}
// View-Model
class TaskViewModel : BindableBase
{
private readonly Task _task;
public TaskViewModel(Task task)
{
_task = task;
}
...
}
Давайте, что класс Task имеет свойство «Subject», и мы должны показать эти данные. Так, по MVVM я должен:
дублированию свойства «Subject» в View-модели:
// View-Model
class TaskViewModel : BindableBase
{
public String Subject
{
get{ return _task.Subject; }
set
{
_task.Subject = value;
// I can't use SetProperty(ref _task.Subject, value)
// it's contradict c# syntax
OnPropertyChanged("Subject");
}
}
}
Как вы видите, я не могу использовать метод SetProperty для такой конструкции, и единственный способ это призвание raw onPropertyChanged метод.
Кажется, что SetProperty является самым большим преимуществом класса BindableBase, и очень странно, что мы не можем использовать его в такой прямой и общей реализации MVVM. Поэтому я подумал, что, возможно, я что-то пропустил или неправильно работал с указанным классом.
Вы знаете, как использовать BindableBase для указанного дизайна и получить некоторое улучшение кода?
Thanks
Я думаю, что viewmodel ничего не знает о представлении так ... Классический шаблон MVVM: View -> View-Model -> Model – Jose
Не согласен, https://en.wikipedia.org/wiki/Model_View_ViewModel View имеет ссылку на View-Model через DataContext –
Ops, I typo :) Я думал о View. В «чистом» MVVM это не должно быть, но, насколько я знаю, строгого ограничения нет, и обычно у него есть ссылка, потому что это удобно. Во всяком случае, он не связан с subj. –