【发布时间】:2015-07-04 08:07:52
【问题描述】:
我正在从 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 在没有某种形式的情况下直接使用时有点混乱IOC(至少使用 WPF)。
所以,我的两个问题是:
- 将
Model注入ViewModel是正确的方法,还是应该在Model上实现INotifyPropertyChanged接口并利用WPF 的绑定基础结构? - 要获得 MVVM 的好处,您应该几乎总是使用 IOC 和 DI 容器来实现它,还是使用 Prism 更好?
【问题讨论】:
标签: wpf mvvm inversion-of-control prism ioc-container