【发布时间】: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