Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C WPF桌面应用程序中将ViewModel的属性指定给另一个ViewModel的属性_C#_.net_Wpf_Mvvm - Fatal编程技术网

C# 在C WPF桌面应用程序中将ViewModel的属性指定给另一个ViewModel的属性

C# 在C WPF桌面应用程序中将ViewModel的属性指定给另一个ViewModel的属性,c#,.net,wpf,mvvm,C#,.net,Wpf,Mvvm,我正在开发一个C WPF MVVM应用程序。我是MVVM新手,没有使用任何工具包/库,只是一个实现ICommand接口的ActionCommand类和一个实现INotifyPropertyChanged my ViewModels派生自该类的BaseINPC类 我的模型有一个DataSet类,其字符串InputPath属性表示DataSet文件的位置 在我的MainView中,我在顶部有一个菜单,它是它自己的MenuView视图,使用UserControl实现,UserControl将其Data

我正在开发一个C WPF MVVM应用程序。我是MVVM新手,没有使用任何工具包/库,只是一个实现ICommand接口的ActionCommand类和一个实现INotifyPropertyChanged my ViewModels派生自该类的BaseINPC类

我的模型有一个DataSet类,其字符串InputPath属性表示DataSet文件的位置

在我的MainView中,我在顶部有一个菜单,它是它自己的MenuView视图,使用UserControl实现,UserControl将其DataContext设置为对应的MenuViewModel。每个菜单项都绑定到一个ActionCommand,该命令执行基本IO操作,例如用于加载文件的OpenFileDialogs等。MenuViewModel具有用于保存文件位置的SelectedPath属性

我的问题是:当我使用MenuView选择文件时,即在MenuView模型中设置SelectedPath属性时,我还希望它将DataSet.InputPath设置为SelectedPath。然而,我的DataSet类是在我的MainViewModel中实例化的,而不是MenuViewModel,这正是我所处的位置


我的方法正确吗?如果是这样,如何将MainViewModel中的DataSet.InputPath设置为MenuViewModel的SelectedPath?

如果坚持不使用MVVM框架,则需要编写自己的消息总线实现


否则,,事实上,所有MVVM框架都使用消息总线进行这种类型的VM间通信,因此选择一个不错的noob友好型MVVM框架我建议使用简单的MVVM工具包或MVVM Light,并利用其消息总线,而不是重新发明轮子,编写自己的MB。实现此功能后,您将能够从一个viewmodel向另一个viewmodel发送通知。请阅读此处的更多详细信息。@bogza.anton,那么您是在鼓励他编写自己的消息总线实现,而不是使用一个成熟的、同行评审的MVVM框架?如果他的目标纯粹是学术性的,那么这是有意义的,否则我的建议是获得一个好的MVVM框架,然后继续编写真正重要的代码……我最终没有框架,因为我认为它们不是必需的,但因为显然它们是需要的,我将不得不查看@DeanK.的建议框架。@DeanK。根据您的建议扩展我的问题:假设我确实使用了MVVM框架,那么viewmodels相互传递参数的方法是否正确?@globetrotter是的,在这种情况下,您将使用框架的SendMessage方法在视图模型之间传递对象。。。