【发布时间】:2013-11-18 12:37:48
【问题描述】:
我正在构建一个非常简化的 WPF 应用程序,看起来像这样:
我有一个包含菜单和 ContentControl 的 ApplicationView。 ContentControl 绑定到由菜单设置并由其相关视图呈现的 CurrentViewModel 属性(视图和 ViewModel 由 App.xaml 中定义的 DataTemplates 耦合)。
我在Rachel Lim's blog找到了这种方法
因此,在本例中,我的视图包含职责列表以及当前所选职责的“详细信息”窗口。
此设置运行良好,但我认为我的 ViewModel 太胖了! 这个 ViewModel 的非简化版本大约有 500 行代码,用于处理:
- 初始化过滤器
- 过滤列表的逻辑
- 显示职责详情
- 添加/更新/取消/删除逻辑
现在我对 WPF 很陌生,但是这似乎代码太多了,是吗? 在我完成之前它会更大。
无论如何,我想我可以将 ViewModel 拆分为两个单独的 ViewModel;一个用于保存列表和过滤器,一个用于显示详细信息。但是如何才能最好地完成呢?
我想到了两种方法,但不知道哪种方法更可取:
创建一个 DutyMasterView,其唯一目的是为实际 View 保存两个 ContentControl(即 DutyListView 和 DutyDetailView,每个都有自己的 ViewModel)? 我使用 MVVM Light 作为我的框架,所以我想我可以使用消息传递服务来告诉 DutyDetailViewModel 显示哪个 Duty,对吧? 或者,创建一个公开所选职责的 DutyMasterViewModel。
放弃 DutyMasterView 并将 DutyDetailView 嵌套在 DutyListView 中。
将我的 ViewModel 分成两部分是否有意义,或者我应该坚持使用我的胖 ViewModel? 如果建议拆分 ViewModel,我的哪个建议最有意义? 我应该考虑其他方法吗?
【问题讨论】:
-
500 行在我看来不是一个大文件。
-
决定最适合您的。在我看来,超过 500 LOC 的 ViewModel 往往会变得难以维护。
-
如果 DutyDetailViewModel 的唯一工作是显示职责,我看不出使用任何消息传递的意义。只需更新 Master VM 中的属性以返回不同的 Detail VM。
-
方法 #3 - 一个超大型 VM 拆分为 3 个部分类。 :D 笑话
标签: wpf user-interface mvvm viewmodel