我正在编写一个有 4 个视图的程序:公司视图, 会员查看, 周视图 and 报告查看。每个都有对应的ViewModel和Model。我使用 PRISM BindableBase 来创建 ViewModel。数据绑定正确。
-
公司视图模型包含一个对象类型Company.
-
成员视图模型包含一个 ObservableCollectionMember对象。
-
周视图模型包含一个 ObservableCollectionWeek对象。
通过主窗口中的顶部按钮执行导航,可以随时选择任何视图.
Container.RegisterTypeForNavigation<CompanyView>("CompanyView");
Container.RegisterTypeForNavigation<MembersView>("MembersView");
Container.RegisterTypeForNavigation<WeeksView>("WeeksView");
Container.RegisterTypeForNavigation<ReportsView>("ReportsView");
问题是周视图模型 must also可以访问ObservableCollection 成员。还有报告视图模型 must also可以访问Company Object, ObservableCollection 成员和周可观察集合.
我不知道如何实现这一点。如何轻松地在 ViewModel 之间共享数据?
我尝试过使用PRISM IEventAggregator发布可观察集合当它们更新时,这可以工作,但是必须首先访问视图,然后才能侦听事件。如果用户之前没有单击过“周”视图,则更新后的会员收藏达不到周视图。我可以预先初始化视图吗?我该怎么做?
我跟着Prism 让 MVVM 变得简单 - 网络研讨会 (https://www.youtube.com/watch?v=ZfBy2nfykqY https://www.youtube.com/watch?v=ZfBy2nfykqY)并发现评论中写的同样的问题。 Brian Lagunas 建议解决此问题的唯一方法是通过导航参数:
我在 UpdateEvent 将消息从 ViewAViewModel 传递到 ViewBViewModel 时遇到了一个小问题。如果我没有访问过 ViewB,它似乎不起作用,我认为这是因为 ViewBViewModel 尚未实例化,直到它的视图至少加载一次。
任何人对此有任何想法,我认为在需要之前实例化所有视图模型是一个坏主意,那么如何在实例化视图模型之前从其他视图模型获取默认信息?
Brian Lagunas:唯一的方法是在导航到 ViewBViewModel 时将该信息作为参数传递。
我考虑过使用导航参数,但似乎您必须知道从哪里导航到哪里。例如。从会员查看 > 周视图,通过会员收藏作为参数。但用户可以按任何顺序导航,包括直接导航到周视图在程序加载时。例如如何周视图得到会员收藏如果他们来自公司视图?公司不了解会员收藏。
我对其他想法持开放态度,我进行了广泛的研究,但完全陷入困境:-(
非常感谢您的想法和帮助!
亲切的问候,
达米安