我一直在阅读来自MSDN等各种来源的MVVM模式:
http://msdn.microsoft.com/en-us/magazine/dd419663.aspx
在那篇文章中它说:与MVP中的Presenter不同,ViewModel不需要对视图的引用.
如果View(XAML)假定它的DataContext是ViewModel,那么代码中的位置是以下行:
view.DataContext = viewModel;
Run Code Online (Sandbox Code Playgroud)
ViewModel对视图一无所知,因此无法设置datacontext.如果我给ViewModel提供参考,我是否打破了MVVM模式?我的另一个选择是拥有某种类型的Builder或额外的Presenter,其唯一的工作就是连接整个事物(等待View的加载事件,设置DataContext).
我知道不同的视图可以共享相同的DataContext(例如,仅为主窗口设置DataContext,而其他人将看到它),但在许多情况下,这根本不可能,甚至不可行.
这个问题很多,有很多答案.这一切都取决于您希望如何构建您的应用程序.例如,我使用依赖注入来创建我的IViewModel,然后创建我的IView,我的IViewModel在构造函数上运行IView.SetViewModel(this).
其他人可能希望通过在Xaml中设置DataContext来使用更多Blendable方法:
<UserControl.DataContext>
<ns:CrazyViewModel />
</UserControl.DataContext>
Run Code Online (Sandbox Code Playgroud)
有时可以隐含DataContext,因此它由框架设置,就像ItemsControl使用的DataTemplate实例一样.这在桌面WPF中也很常见,因为它支持类型化的DataTemplates.
因此,设置DataContext确实没有错误的方法,只要您分离关注点,可维护且易于测试.
Shawn Wildermuth 有一篇关于 View 还是 ViewModel 优先的文章: http://wildermuth.com/2009/05/22/Which_came_first_the_View_or_the_Model
我喜欢并使用他的婚姻概念,其中第三方类创建视图和视图模型,然后将两者关联起来。这对我来说效果很好。
| 归档时间: |
|
| 查看次数: |
5629 次 |
| 最近记录: |