【发布时间】:2010-11-26 16:59:08
【问题描述】:
我是 .net 和 MVVM 设计模型的新手。我现在卡住了,因为在我的一个视图的代码隐藏文件中,我需要获取相应的模型作为对象。这里的关系如何?有可能吗,它是“正确的方法”吗?
【问题讨论】:
我是 .net 和 MVVM 设计模型的新手。我现在卡住了,因为在我的一个视图的代码隐藏文件中,我需要获取相应的模型作为对象。这里的关系如何?有可能吗,它是“正确的方法”吗?
【问题讨论】:
View 应该访问封装了 Model 的 ViewModel,将其隐藏在 View 之外。如果您需要从 View 访问 Model 的属性,请让 ViewModel 将它们公开为 View 可以绑定到的属性。
【讨论】:
MVVM 并不禁止 View 直接访问 Model。这是 MVVM 社区中常见的误解。
您的 ViewModel 可以公开底层 Model,以便 View 可以直接访问该模型。
绑定:
{Binding Model.Title}
代码背后:
((MyViewModel)DataContext).Title
WPF Application Framework (WAF) 的 ViewModel (EmailClient) 示例应用程序展示了如何从视图访问模型。
【讨论】:
ViewModel 应该完全不了解视图。 View 应该只使用 DataBinding,所以不知道模型或 ViewModel。
如果需要与视图交互,都必须通过DataBinding。只有在特殊情况下,您才应该求助于代码隐藏。
所以在 ViewModel 上拥有一个属性并将其绑定到视图。
【讨论】:
public partial class MyView : Window
{
private MyViewModel aModel;
public MyView()
{
InitializeComponent();
aModel = new MyViewModel();
this.DataContext = aModel();
}
现在视图将更改其绑定到 ViewModel 的公共属性的控件数据绑定。
【讨论】: