Я делаю переход от MVP к MVVM и немного смущен относительно того, как наилучшим образом привязать ViewModel
к Model
. Я понимаю, как мы можем использовать данные WPF в обязывающих инфраструктуру для маршрутизации событий между View
и ViewModel
использованием ICommand
и INotifyPropertyChanged
интерфейс, например, View
:Binding Model to ViewModel (WPF)
public class MyView
{
public MyView()
{
InitializeComponent();
DataContext = new MyViewModel();
}
}
и ViewModel
:
public class MyViewModel : INotifyPropertyChanged
{
public MyViewModel(){}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
var handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
}
public ICommand MyCommand ...
}
Это прекрасно работает !
Сейчас, как правило, с MVP я должен был бы мой Presenter
держать ссылку на Model
через инъекцию конструкторы, а также повысить события на Model
из Presenter
для обновления данных в Model
. Я пробовал такой же подход с MVVM, но для этого требуется ViewModel
взять Model
в качестве зависимости в его конструкторе, который, кажется, делает вещи немного грязными с MVVM при использовании его прямо из коробки без какой-либо формы IOC (с WPF как минимум).
Итак, мои два вопроса:
- ли инъекции
Model
вViewModel
правильный подход, или я должен реализуетINotifyPropertyChanged
интерфейс наModel
и использования связывания инфраструктуры WPF в? - Чтобы воспользоваться преимуществами MVVM, вы должны почти всегда реализовывать его с помощью IOC и контейнера DI или, еще лучше, Prism?
Связанный вопрос: http://stackoverflow.com/questions/16947122/binding-to-model-or-viewmodel. –
Связанный вопрос: http://stackoverflow.com/questions/16864610/mvvm-propertychanged-in-model-or-viewmodel –
Связанный вопрос: http://stackoverflow.com/questions/772214/in-mvvm-should-the -viewmodel-or-model-implement-inotifypropertychanged –