Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.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# 如何访问一个ViewModel';使用MVVM在WPF应用程序中的另一个ViewModel中创建对象_C#_Wpf_Mvvm - Fatal编程技术网

C# 如何访问一个ViewModel';使用MVVM在WPF应用程序中的另一个ViewModel中创建对象

C# 如何访问一个ViewModel';使用MVVM在WPF应用程序中的另一个ViewModel中创建对象,c#,wpf,mvvm,C#,Wpf,Mvvm,我在WPF应用程序中使用mvvm模式,不使用任何数据库。我遇到了一个问题,我有一个视图UploadView,其中用户上载了一些excel文件及其视图模型,名为UploadViewModel。在这个视图中,我读取了上载的文件数据,并将其保存在某个datatable对象中,该对象是UploadvViewModals类的对象,工作正常,但我的问题是,现在我必须显示上载的数据(datatable对象)它位于具有不同Viewmodal的some Items控件中的另一个视图上。 作为WPF和windows

我在WPF应用程序中使用mvvm模式,不使用任何数据库。我遇到了一个问题,我有一个视图UploadView,其中用户上载了一些excel文件及其视图模型,名为UploadViewModel。在这个视图中,我读取了上载的文件数据,并将其保存在某个datatable对象中,该对象是UploadvViewModals类的对象,工作正常,但我的问题是,现在我必须显示上载的数据(datatable对象)它位于具有不同Viewmodal的some Items控件中的另一个视图上。 作为WPF和windows的新手,我不知道如何继续。 有什么可能的方法可以做到这一点?

你可以在(中介模式)获得战利品


其他一些方法可以启动

根据两个视图模型的松散耦合程度,有几种方法可以实现这一点。如果在上载视图模型中直接引用了第二个视图模型,则可以在显示此视图模型/视图时传递数据

如果a)数据是第二视图模型的要求,b)上传视图模型负责创建第二视图模型,那么这似乎是最明智的选择。在这种情况下,可以将数据作为依赖项传递给第二个视图模型的构造函数


其他方法包括使用事件聚合器作为中介在两个视图模型之间传递数据,但我会选择第一种方法。

如果您使用的是MVVM,您应该真正访问模型类中的Excel文件。ViewModels通常用于将模型数据转换为视图可以显示的格式,而不是用于访问数据。

是。我在上传的viewmodel中直接引用了第二个viewmodel,我还可以将该数据作为构造函数参数传递。但是,一旦我关闭这个上传视图窗口,然后打开第二个视图,其中一个负责显示上传的数据,所有的数据就会被清除,并给我一个空的datatable。正如前面提到的,数据应该存储在一个模型中,然后传递给第二个视图模型,因此,上传的数据应转换为可作为状态存储在模型中的格式(例如字节数组)