从视图中访问MVVM模型

5

我是一名初学者,对于.net和MVVM设计模式还不太熟悉。目前我遇到了困难,因为在我的某个视图的代码后台文件中,我需要获取相应的模型对象。这里的关系是什么?是否可能,并且是否“正确的做法”?

4个回答

6

视图应该访问包装模型的ViewModel,并将其从视图中隐藏。如果您需要从视图访问模型的属性,请让ViewModel将其公开为视图可以绑定到的属性。


好的,我明白答案大致是这样的。但我还是有一些问题。 当我点击一个类型为A的视图1时,我希望它将其对应的模型保存到ViewModel中。当我点击一个类型为A的视图2时,我也希望它将其对应的模型保存到同一个ViewModel中。目前为止,我只知道如何保存视图本身,而不是模型:/ - Andreas

2
MVVM并不禁止View直接访问Model,这是MVVM社区中的一个常见误解。
您的ViewModel可以公开底层Model,以便View可以直接访问模型。
数据绑定:
{Binding Model.Title}

后置代码:

((MyViewModel)DataContext).Title

ViewModel(EmailClient)WPF应用框架(WAF)的示例应用程序展示了如何从视图中访问模型。


1

ViewModel 应该完全不知道视图的存在。视图应该仅使用 DataBinding,因此不了解模型或 ViewModel。

如果您需要与视图交互,则必须全部通过 DataBinding 进行。只有在特殊情况下才应该使用代码后台。

因此,在 ViewModel 上设置属性 并将其与视图进行 绑定


他想从视图中访问模型,而不是反过来。 - Jackson Pope
好的,很棒,但我假设View可以使用ViewModel定义的类作为其公开属性的类型 ;) - ed22

0
public partial class MyView : Window
{
     private MyViewModel aModel;

     public MyView()
     {
         InitializeComponent();
         aModel = new MyViewModel();
         this.DataContext = aModel();
}

现在,视图将更改其控件的数据绑定,这些数据绑定绑定到 ViewModel 的公共属性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接