“同级”视图之间基于事件的通信

时间:2019-03-06 11:26:45

标签: c# .net wpf mvvm

我刚开始使用WPF,所以我一直在努力应对一些基本概念。

我的应用程序由一个包含各种选项卡的主窗口组成。第一个选项卡用于添加文件,激活在给定文件上运行的其他选项卡。为了简单起见,我们将后者称为“ DataTabs”。

我不确定如何在两个标签之间正确通信。当前,FileInputTab使用指定的ICommand执行以下操作:读取数据,为DataTab创建视图模型,并使用FileInputTab的视图引发“ ViewModelReadyEvent”。

然后此事件冒泡到MainWindow,该窗口将激活DataTab,并将创建的ViewModel传递给它们。

现在,我正在努力解决两件事。

填充视图模型 将DataTab的视图模型填充到其对应视图中,而不是从实际上与此无关的FileInputTab中填充,这是一种更好的方法吗?这样,我可以正确地在两者之间建立参考,但是我必须为每个DataTab分别执行填充。有什么想法吗?

“同级”视图之间的通信 让事件一直冒泡到MainWindow使其编排所有视图间通信是不合适的。我研究了RoutingStrategies,但是找不到任何直接在“同级”视图之间进行通信的方法。我想在FileInputTab中引发一个事件,然后在DataTab中直接对其进行操作,而无需任何中间操作。

WPF专家的任何想法,评论或书籍建议将不胜感激。预先感谢。

2 个答案:

答案 0 :(得分:0)

使用MVVM,您可以为每个选项卡引入一个ViewModel。然后,您可以为ViewModel之间的通信编写服务。如果使用Messenger模式,这非常容易。一个ViewModel向服务发送一条消息,服务将其转发给另一个ViewModel。该Service也可以完成工作,因此您的ViewModel将没有任何业务逻辑。

MVVM Light可以帮助您使用MVVM模式。

答案 1 :(得分:0)

您可以使用IEventAggregator在ViewModel之间进行通信。

相关问题