Jam*_*s B 4 wpf prism ioc-container inversion-of-control mvvm
我正在从MVP转会MVVM,和一点点困惑,如何最好绑定ViewModel到Model.我理解我们如何利用WPF的数据绑定基础设施来路由View和ViewModel使用ICommand和INotifyPropertyChanged接口之间的事件,例如View:
public class MyView
{
public MyView()
{
InitializeComponent();
DataContext = new MyViewModel();
}
}
Run Code Online (Sandbox Code Playgroud)
和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 ...
}
Run Code Online (Sandbox Code Playgroud)
这很棒!
现在,通常使用MVP我会Presenter持有对Modelvia构造函数注入的引用,并在其中引发Model来自Presenter更新数据的事件Model.我试着用MVVM相同的方法,但是这需要ViewModel采取Model至少在其构造的依赖,这似乎使事情与MVVM有些凌乱使用时直接开箱没有某种形式的国际奥委会(与WPF ).
所以,我的两个问题是:
Model到ViewModel正确的方法,或者我应该可以实现INotifyPropertyChanged对界面Model和利用WPF的结合的基础设施?它是"纯粹的"MVVM方法:View必须仅依赖于ViewModel.它ViewModel本身就是View和之间的桥梁Model.
动机 - 定义和责任Model,View以及 ViewModel他们的关系:
- 模型,提供业务实体的视图无关表示.无论数据在用户界面中的呈现方式如何,模型的设计都针对业务实体之间的逻辑关系和操作进行了优化.
- View类是用户界面.它向用户显示信息并响应用户交互触发事件.
- ViewModel类,它是视图和模型之间的桥梁.每个View类都有一个对应的ViewModel类.ViewModel 从Model中检索数据并将其操作为View所需的格式.它会通知View是否更改了模型中的基础数据,并且它会更新模型中的数据以响应来自View的UI事件.
结论.注射Model入ViewModel似乎是正确的做法.此外,注入Model它不是注入它是有用的:
Model Factory创建Model-延迟初始化;Service(Service Facade)来检索Model-延迟加载.如Michael Brown撰写的"MVVM Unleashed"一书中所示,可以利用以下MVVM的潜在优势:可维护性,可测试性,"可混合性",可移植性.至少,依赖注入(在所描述的情况下通过使用依赖注入容器)允许设计遵循依赖性反转原则:
依赖倒置的原则是面向对象技术所要求的许多好处的根源.它的正确应用对于创建可重用框架是必要的.对于能够适应变化的代码构建来说,这一点至关重要.并且,由于抽象和细节都彼此隔离,因此代码更容易维护.
因此,当遵循依赖性倒置原则时,MVVM的可维护性和可测试性的好处似乎得到了改善.依赖注入容器只是遵循原则的工具.
| 归档时间: |
|
| 查看次数: |
3130 次 |
| 最近记录: |