MVVM - 在 WPF 中的视图之间进行通信的正确方法是什么
MVVM - What's the proper way to communicate between views in WPF
我有一个像下面这样的应用程序(我知道颜色很糟糕,我只是这样做以便于解释):
它有 3 个视图和 3 个视图模型。一个主视图(灰色的)包含一个内容控件,它会根据单击哪个按钮改变视图,主视图(绿色的)让用户选择一个文件,蓝色的应该读出文件内容
主视图和主视图:
MainView 和 FileView
选择文件的按钮是在homeview的代码隐藏中实现的,它只是一个简单的openfiledialog,我需要的是将openfiledialog的结果从homeview的(绿色的)代码后面传递给文件的视图(蓝色的)或者 FileViewModel(不确定这里哪个更合适),以便它可以在蓝色视图中显示文件的内容。我试图做的是调用一个命令来尝试在这两个视图之间进行通信并在它们之间传递文件路径,但我不确定这是否是合适的方法。
您可以使用 event aggregator 或信使以松散耦合的方式将“事件”或“消息”从应用程序中的一个组件发送到另一个组件。
另一个类似的选择是用 shared service 注入视图模型(或其他组件)并使用这个在它们之间进行通信。
第三种选择是使用直接引用,即您的 HomeViewModel
引用了 FileViewModel
,反之亦然。请注意,这会在您的类型之间产生紧密耦合,出于可维护性原因,您通常希望避免这种情况。
您也可以考虑将两个视图绑定到同一个视图模型。
我有一个像下面这样的应用程序(我知道颜色很糟糕,我只是这样做以便于解释):
它有 3 个视图和 3 个视图模型。一个主视图(灰色的)包含一个内容控件,它会根据单击哪个按钮改变视图,主视图(绿色的)让用户选择一个文件,蓝色的应该读出文件内容
主视图和主视图:
MainView 和 FileView
选择文件的按钮是在homeview的代码隐藏中实现的,它只是一个简单的openfiledialog,我需要的是将openfiledialog的结果从homeview的(绿色的)代码后面传递给文件的视图(蓝色的)或者 FileViewModel(不确定这里哪个更合适),以便它可以在蓝色视图中显示文件的内容。我试图做的是调用一个命令来尝试在这两个视图之间进行通信并在它们之间传递文件路径,但我不确定这是否是合适的方法。
您可以使用 event aggregator 或信使以松散耦合的方式将“事件”或“消息”从应用程序中的一个组件发送到另一个组件。
另一个类似的选择是用 shared service 注入视图模型(或其他组件)并使用这个在它们之间进行通信。
第三种选择是使用直接引用,即您的 HomeViewModel
引用了 FileViewModel
,反之亦然。请注意,这会在您的类型之间产生紧密耦合,出于可维护性原因,您通常希望避免这种情况。
您也可以考虑将两个视图绑定到同一个视图模型。