c# - 如何使用嵌入式 View 模型

标签 c# wpf mvvm

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

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

Model
    List family

View model
     Observable collection families(model.families)

但我现在读到两件事:
  • 数据上下文 总是 指向 View 模型对象。
  • 可观察的集合应该是 的集合查看模型

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

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

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

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

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

    谢谢你缓解了我的头痛。

    最佳答案

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

    But if your model has a list of family objects, how do you construct a observable collection of familyviewmodels?



    您在这里没有提供任何代码示例的方式,因此不可能提供任何精确的指导。但是,肯定没有什么能阻止您创建 FamilyViewModel代理 Family对象,就像您的 ObservableCollection<Family>将代理 Family 的列表对象。然后你可以使用 ObservableCollection<FamilyViewModel>反而。

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

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

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

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

    关于c# - 如何使用嵌入式 View 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38215488/

    相关文章:

    mvvm - 在不同 View 中显示的同一模型的不同ViewModel

    c# - 使用 MVC 4 在 C# 中使用 Session 进行 foreach 循环

    c# - XAML 绑定(bind) : binding to properties of a "global" object

    WPF 绑定(bind)到一个不变的属性

    wpf - 在 TabItem 中加载 UserControl

    wpf - Treeview 虚拟化和不稳定的滚动

    c# - 为什么我不能在没有枚举的情况下从 HashSet 中检索项目?

    c# - 如何使此 var 在 Razor Pages 中可访问

    c# - NHibernate.QueryException 消息 : duplicate association path

    wpf - 如何将枚举添加到 WPF 上下文菜单