C# 如何使用嵌入式视图模型

C# 如何使用嵌入式视图模型,c#,wpf,mvvm,C#,Wpf,Mvvm,我很可能把事情复杂化了。我现在已经读了好几本教程,但有些不明白 我知道一个可观察的集合被映射到一个模型项列表 Model List family View model Observable collection families(model.families) 但我现在读到两件事: 数据上下文始终指向视图模型对象 可观察的集合应该是视图模型的集合 因此我感到困惑。如果视图上的组合框绑定到族列表,然后选择了一个族,则其余控件将显示该族的详细信息 我理解视图模型属性角色的概念是

我很可能把事情复杂化了。我现在已经读了好几本教程,但有些不明白

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

Model
    List family

View model
     Observable collection families(model.families)
但我现在读到两件事:

  • 数据上下文始终指向视图模型对象

  • 可观察的集合应该是视图模型的集合

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

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

    但是,如果您的模型有一个族对象列表,那么如何构建可观察的familyviewmodels集合

    如果有一个更合适的地方问这个问题,那么请告诉我,我将删除这个问题

    我认为,
    observateCollection(model.families)
    是正确的选择。然后将值绑定到选定组合对象的成员。这当然有效。但从我所读到的,我觉得我有一些不正确的事情,如上面详述的


    谢谢你减轻了我的头痛

    在我看来,你的问题至少有一部分是“基于观点的”。因此,您可能会更幸运地在或上征求意见。请注意,如果您选择后者,则必须构建一个良好的示例,清楚地说明您的问题,并根据该代码示例提出您的问题

    但是,如果您的模型有一个族对象列表,那么如何构建可观察的familyviewmodels集合

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


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

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

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

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