【问题标题】:Best way to split huge view model/xaml拆分巨大视图模型/xaml 的最佳方法
【发布时间】:2019-07-17 10:54:35
【问题描述】:

我正在重构一个大视图模型及其关联的 XAML 页面。我用棱镜。主页面有明确的功能,创建头像。有一些创建头像的步骤,例如拍照、编辑图片等。我现在有一个详细信息侧栏,用于控制步骤的导航和一个主要内容区域,我根据这些步骤显示不同的内容。我根据步骤隐藏/显示适当的视图。该项目发展壮大,现在我有一个 2000 多个线视图模型和一个巨大的 XAML 文件。

经过一些研究,我最终做的是为每个步骤创建 ContentView(再次为每个步骤显示和隐藏它们),因此 XAML 为每个步骤模块化,并且每个步骤都有一个视图模型。我成功地将 ContentView 绑定到每个 ViewModel,但现在我在传达不同的 View Model 信息时遇到了问题。

和以前一样,所有视图都在同一个视图模型中,如果需要,所有视图都可以共享相同的绑定属性。现在,由于每个视图模型都是独立的,我需要找到一种方法来正确共享这些信息。我的第一种方法是使用消息中心。这样,我可以将需要共享的信息发送到管理步骤之间导航的视图模型 (NavigationViewModel),并且可以将此信息发送到以下视图模型。

问题是我不太喜欢这个解决方案,因为我觉得它太复杂了,最终会在 NavigationViewModel 中使用大量代码来订阅/发送到每个子视图模型以传递共享信息。

所以我的问题是,你知道任何其他方式来简化视图模型之间的通信吗?

我什至考虑过使用部分类来“隐藏”我的大视图模型复杂性,但我认为这不是一个好主意。

【问题讨论】:

  • 可能需要你的代码来制作细节cmets,但你可以注入一个单例并保持那里的状态?
  • 感谢您的回复。我最终成功地完成了这个答案中的建议:stackoverflow.com/a/43539228/9395428
  • 那真是个好东西……我也可以用它!!!感谢回复

标签: c# xamarin.forms mvvmcross viewmodel


【解决方案1】:

最近我遇到了同样的问题,我的 ViewModel 变得非常庞大(有数百个属性)。所以我所做的是:

  1. 创建了一个接口类。把所有的公共属性放在那里。假设是 IA。
  2. 创建了另一个继承 IA 的类。

现在多个类继承了 IA,减少了整体属性数量。

【讨论】:

  • 继承可以帮助到一个极限,但在我的情况下,它不是需要共享的属性数量,而是模块化不同视图模型中的功能。正如我在对我的帖子的评论中所说,我使用了这个答案中建议的解决方案:stackoverflow.com/questions/43538718/… 虽然感谢您的回答
猜你喜欢
  • 2022-12-16
  • 2011-03-06
  • 2013-09-15
  • 1970-01-01
  • 1970-01-01
  • 2018-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多