【问题标题】:Best Practice Observablecollection<Model> vs Observablecollection<ViewModel>最佳实践 Observablecollection<Model> 与 Observablecollection<ViewModel>
【发布时间】:2013-05-09 17:45:09
【问题描述】:

哪一个是保存我的数据的更好解决方案,还是取决于某些条件?

示例情况 1:
您需要在选择后在新窗口中显示可以修改的数据列表。

示例情况 2:
您需要显示一个可以在此列表中修改的数据列表。

【问题讨论】:

    标签: c# wpf mvvm observablecollection


    【解决方案1】:

    当您使用 MVVM 时,您应该使用 ObservableCollection&lt;ViewModel&gt;

    Model 应该通过 ViewModel 与 View 分离。

    【讨论】:

    • 当然,但是ObservableCollection&lt;&gt; 已经在ViewModel 中,所以它已经与View 分开了,还是我错过了什么?
    • @WiiMaxx 并没有真正分开,因为您实际上仍在视图中使用该类。
    • 哦,好反对。因此,您认为为用户可能从未使用过的对象创建 2 个对象 Model-> ViewModel 不会是开销
    • 如果它被提供给视图,那么我认为这是必要的开销(遵守 MVVM 模式)。您总是可以在其他区域重用视图模型的所有部分(如果不是部分的话)。
    【解决方案2】:

    我会说使用ObservableCollection&lt;Model&gt;,因为它可以直接绑定到列表或数据网格。

    对于示例情况 1:选择一个模型,然后将新窗口的数据上下文设置为该模型。

    对于示例情况 2:使用 2 路绑定对数据网格进行就地编辑。

    ObservableCollection 可以在 ViewModel 中。如下图所示。

    public class MyViewModel
    {
         public ObservableCollection<Model> ListOfItems { get; set;}
    }
    

    【讨论】:

    • 就像 mattytommo 已经说过 View 必须从模型中分离出来,所以它更像是选择一个 Model 创建一个 ViewModel,给他模型并设置这个 ViewModel作为DataContext
    • 我仍然会继续上面的实现,因为这意味着我们需要在 Model 类中实现 INotifyPropertyChanged。这将使绑定到视图更容易。看看这个线程:stackoverflow.com/questions/6922130/…
    猜你喜欢
    • 2011-09-22
    • 1970-01-01
    • 1970-01-01
    • 2010-10-14
    • 2012-05-20
    • 2011-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多