我正在从MVP转向MVVM,但对于如何最好地将ViewModel
绑定到Model
有些困惑。我知道我们可以利用WPF的数据绑定基础结构使用ICommand
和INotifyPropertyChanged
接口在View
和ViewModel
之间路由事件,例如,在View
中:
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
的引用,并在Presenter
中触发Model
的事件,以更新Model
中的数据。我尝试在MVVM中采用同样的方法,但这要求ViewModel
在其构造函数中将Model
作为依赖项,而如果直接使用MVVM(至少是用WPF)可能会使事情变得有些混乱。
因此,我的两个问题是:
- 将
Model
注入ViewModel
是否是正确的方法,还是应该在Model
上实现INotifyPropertyChanged
接口,并利用WPF的绑定基础架构? - 为了获得MVVM的好处,是否几乎总是需要使用IOC和DI容器来实现,或者更好的是使用Prism?