【问题标题】:MVVM View Model OrganizationMVVM 视图模型组织
【发布时间】:2021-06-09 17:18:33
【问题描述】:

制作我的第一个 WPF MVVM 应用程序时,我对视图模型的组织有疑问。我有一个与 ClassB 一对多关系的 ClassA

我希望主视图看起来像这样。它包含来自 A 类的一些信息以及与 A 类关联的所有 B 类实例的列表视图

我提出了两种方法,但我不确定哪个组织(如果有的话)被认为是最好的方法。 (这是一个标准的 CRUD 应用程序:我希望能够修改 A 类,从 A 类中添加和删除 B 类,修改 B 类)


方法 1 主视图模型包含一个 ClassAViewModel 和一个 ClassBViewModel 列表

方法 2 主视图模型包含一个 ClassAViewModel。 ClassAViewModel 处理自己的 ClassBViewModel 列表

对于哪种方法最适合我/一种新方法,我将不胜感激。我也愿意接受任何有助于我更好地理解软件设计和一般最佳实践的资源建议

【问题讨论】:

  • 在没有任何其他知识的情况下查看方法 2 的插图,这种关系立即显而易见。我看不出方法 1 比方法 2 有什么好处——你为什么还要考虑这个?例如。您希望能够从 A 类中删除 B 类,因此当 ClassBViewModel 知道它是 Parent ClassAViewModel(反之亦然)时,这是有益的。如果两个 B 引用相同的模型数据也不是问题。

标签: wpf design-patterns mvvm viewmodel


【解决方案1】:

主视图模型包含一个 ClassAViewModel 和一个 ClassBViewModel 列表

没有。 ClassB 视图模型仅适用于 ClassB 的视图,这不是您的主视图。您的主视图将在您的视图模型中包含 ClassB 数组的列表(ListBoxItemsControl),并模板化为知道如何显示它们的用户控件。

然后,该用户控件的上下文为 ClassBViewModel(只有一个),并专门处理 ClassB 的其余职责。

主视图模型包含一个 ClassAViewModel。 ClassAViewModel 处理自己的 ClassBViewModel 列表

再次,不。充其量您会混淆视图模型(在视图中显示模型类型所需的数据)和模型(对应于数据本身)。 AVM 链接到 A,后者链接到 B 的列表,当绑定到视图本身时,会通过 BVM(如有必要)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-07
    • 2012-06-08
    • 2012-04-15
    • 2014-05-08
    • 2013-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多