【问题标题】:MVVM Access Model from View视图中的 MVVM 访问模型
【发布时间】:2010-11-26 16:59:08
【问题描述】:

我是 .net 和 MVVM 设计模型的新手。我现在卡住了,因为在我的一个视图的代码隐藏文件中,我需要获取相应的模型作为对象。这里的关系如何?有可能吗,它是“正确的方法”吗?

【问题讨论】:

    标签: c# .net mvvm


    【解决方案1】:

    View 应该访问封装了 Model 的 ViewModel,将其隐藏在 View 之外。如果您需要从 View 访问 Model 的属性,请让 ViewModel 将它们公开为 View 可以绑定到的属性。

    【讨论】:

    • 好吧,我想答案是这样的。但我仍然有一些问题。当我单击 A 类型的视图 1 时,我希望它将其相应的模型保存在视图模型中。当我单击 A 类型的视图 2 时,我还希望它将其相应的模型保存在同一个视图模型中。到目前为止,我只知道如何保存自己(视图)而不是模型:/
    【解决方案2】:

    MVVM 并不禁止 View 直接访问 Model。这是 MVVM 社区中常见的误解。

    您的 ViewModel 可以公开底层 Model,以便 View 可以直接访问该模型。

    绑定:

    {Binding Model.Title}
    

    代码背后:

    ((MyViewModel)DataContext).Title
    

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

    【讨论】:

      【解决方案3】:

      ViewModel 应该完全不了解视图。 View 应该只使用 DataBinding,所以不知道模型或 ViewModel。

      如果需要与视图交互,都必须通过DataBinding。只有在特殊情况下,您才应该求助于代码隐藏。

      所以在 ViewModel 上拥有一个属性并将其绑定到视图。

      【讨论】:

      • 他想从视图中访问模型,而不是反过来。
      • 好的,很好,但我假设 View 可以将 ViewModel 定义的类用于它公开的属性;)
      【解决方案4】:
      public partial class MyView : Window
      {
           private MyViewModel aModel;
      
           public MyView()
           {
               InitializeComponent();
               aModel = new MyViewModel();
               this.DataContext = aModel();
      }
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-10-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-11
        • 2013-05-27
        • 1970-01-01
        相关资源
        最近更新 更多