【问题标题】:How to use embedded View Models如何使用嵌入式视图模型
【发布时间】:2016-07-06 02:18:54
【问题描述】:

我可能过于复杂了。我现在已经阅读了几个教程,但有些东西不明白。

我知道一个可观察的集合被映射到一个模型项列表。

Model
    List family

View model
     Observable collection families(model.families)

但我现在读到两件事:

  1. 数据上下文总是指向视图模型对象。

  2. 可观察集合应该是视图模型

  3. 的集合

因此我感到困惑。如果视图上的组合框绑定到族列表,然后选择一个族,则其余控件用于该族的详细信息...

我理解视图模型属性角色的概念是模型数据和视图数据之间的机制。并且每个属性都会引发 onpropertychanged。

但是如果你的模型有一个家庭对象列表,你如何构造一个可观察的家庭视图模型集合?

如果有更合适的地方问这个问题,请指导我,我会删除这个问题。

我认为ObservableCollection (model.families) 是正确的。然后将值绑定到所选组合对象的成员。它当然有效。但从我读过的内容来看,我觉得我有一些不正确的地方,如上所述。

感谢您减轻了我的头痛。

【问题讨论】:

    标签: c# wpf mvvm


    【解决方案1】:

    在我看来,您的问题至少部分是“基于意见的”。因此,在http://programmers.stackexchange.comhttp://codereview.stackexchange.com 上征求意见可能会更好。请注意,如果您选择后者,您必须构建一个良好的Minimal, Complete, and Verifiable code example,清楚地说明您的问题,并针对该代码示例提出您的问题。

    但是如果你的模型有一个家庭对象列表,你如何构造一个可观察的家庭视图模型集合?

    您在这里没有提供任何代码示例,因此无法提供任何准确的指导。但是,当然没有什么可以阻止您创建代理 Family 对象的 FamilyViewModel,就像您的 ObservableCollection<Family> 将代理 Family 对象列表一样。然后你可以改用ObservableCollection<FamilyViewModel>


    这就是我在您的问题中看到的“实际编程问题”的程度,即这将使它成为主题。也就是说,只要我在评论,我就会指出设计模式旨在使代码更易于编写和维护。如果您发现尝试遵循设计模式强加的教条会妨碍良好、可维护的代码,那么是时候放弃该特定教条了,至少在那个特定时刻是这样。

    特别是,我发现“视图模型”和“模型”之间的界限可能很模糊。在某些情况下,程序主要是关于与用户的交互,而视图模型就是所需要的。在其他情况下,程序主要是业务逻辑,编写一个全新的视图模型只是为了包装现有的业务逻辑数据结构是大材小用。

    关注点分离可能很有用,例如当您需要与需要完全脱离 UI 的其他组件进行交互时,或者您希望能够测试 UI 代码而不受一些昂贵且难以重新创建的业务逻辑数据结构的约束。但不要让这个概念束缚你的手。如果你有一个简单的数据结构,可以很容易地通过例如直接映射到 UI 元素。基于列表的控件的模板,我认为直接使用该数据结构作为您的“视图模型”没有任何问题。

    请注意,当然,有些人会不同意我的立场,在某些情况下会激烈反对。因此,您的问题具有“基于意见”的性质。可以说,这是一种可以在这里结束的问题。恕我直言,如果您想要更好和更客观的回答,您应该使用良好的 MCVE 提出您的问题,并将您的问题集中在该代码示例的某些特定方面,这些方面可以以客观的方式解决(例如例如关于如何将您的业务逻辑数据结构映射到与视图模型兼容的数据结构的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-10
      • 1970-01-01
      • 1970-01-01
      • 2016-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多