如何使用嵌入式视图模型

本文关键字:模型 视图 嵌入式 何使用 | 更新日期: 2023-09-27 17:55:02

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

我明白一个可观察集合被映射到一个模型项列表。

Model
    List family
View model
     Observable collection families(model.families)

但我现在读到两件事:

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

  2. 一个可观察对象集合应该是视图模型的集合

所以我很困惑。如果视图上的组合框绑定到家族列表,然后当家族被选中时,其余的控件用于该家族的详细信息…

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

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

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

我认为ObservableCollection (model.families)是正确的。然后将值绑定到所选组合对象的成员。这当然有效。但从我所读到的,我觉得我有一些不正确的细节。

谢谢你缓解了我的头痛。

如何使用嵌入式视图模型

在我看来,你的问题至少有一部分是"基于个人观点的"。因此,您可能会在http://programmers.stackexchange.com或http://codereview.stackexchange.com上获得更好的运气。请注意,如果您选择后者,您必须构建一个良好的最小化、完整和可验证的代码示例,以清楚地说明您的问题,并将您的问题与该代码示例联系起来。

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

您在这里没有提供任何代码示例的方式,所以不可能给出任何精确的指导。但是,当然没有什么可以阻止您创建一个代理Family对象的FamilyViewModel,就像您的ObservableCollection<Family>将代理Family对象列表一样。那么你可以用ObservableCollection<FamilyViewModel>代替。


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

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

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

当然,也有人会不同意我的立场,在某些情况下,他们会强烈反对。因此,你的问题是"基于意见"的。这类问题可以在这里结束。IMHO,如果你想要更好和更客观的回答,你应该用一个好的MCVE来提出你的问题,并把你的问题集中在代码示例的一些特定的方面,这些方面可以用客观的方式解决(例如,关于如何将你的业务逻辑数据结构映射到视图模型兼容的数据结构的问题)。