Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.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
.net MVVM中的启动逻辑应该放在哪里?_.net_Wpf_Mvvm - Fatal编程技术网

.net MVVM中的启动逻辑应该放在哪里?

.net MVVM中的启动逻辑应该放在哪里?,.net,wpf,mvvm,.net,Wpf,Mvvm,我正在使用MVVM编写我的第一个WPF应用程序,我对视图模型的角色以及在应用程序启动时应该将代码放在哪里感到困惑 我的申请很简单。它列出了远程位置的文件,用户可以从中选择要复制到自己计算机上的文件。当应用程序首次启动时,它必须从配置文件中确定当前文件源,读取源中的当前文件,并在主窗口中向用户列出这些文件。如果找不到配置的文件源,则会提示用户选择源 该逻辑是否应包含在ViewModel中?如果是这样的话,它应该放在视图模型的构造函数中吗?这似乎不对,因为我不希望ViewModel读取配置文件,并在

我正在使用MVVM编写我的第一个WPF应用程序,我对视图模型的角色以及在应用程序启动时应该将代码放在哪里感到困惑

我的申请很简单。它列出了远程位置的文件,用户可以从中选择要复制到自己计算机上的文件。当应用程序首次启动时,它必须从配置文件中确定当前文件源,读取源中的当前文件,并在主窗口中向用户列出这些文件。如果找不到配置的文件源,则会提示用户选择源

该逻辑是否应包含在ViewModel中?如果是这样的话,它应该放在视图模型的构造函数中吗?这似乎不对,因为我不希望ViewModel读取配置文件,并在实例化时提示用户


如果这是一个WinForms应用程序,我会在Form.Load或Form.Showed事件中执行此操作。

通常主数据加载代码可以保存在单独的viewmodel函数中,例如
viewmodel.Initialize()
。。。更重要的是在后台线程上,因为它在执行GUI时不会挂起GUI,直到那一刻,您才可以在GUI上显示忙碌的服务员目标

您可以使其
命令
易于驱动(例如中继/委派命令,如
InitilizeCommand
),并且
Initialize()
方法可以是命令的
执行
委派

Initialize()
可以根据您的方便调用。。。在ViewModel的构造函数中启动,或处理
窗口
/
用户控件。使用附加的行为加载
事件并计划“ViewModel.Initialize()”函数,只要该函数位于不同的后台线程上,我们就可以了

如果您使用
PRISM
的模式和实践,那么像这样的数据加载可以自动安装到特定模块中,作为PRISM所代表的整个组合GUI设计的一部分


这里有一个很好的MVVM教程…

如果您有一个简单的应用程序,并且启动时间不长, 您可以使用unity引导应用程序

这一切都在一个非常好的视频介绍中展示 要在此处找到MVVM,请执行以下操作:

他在本视频中开发的源代码也可用:

除此之外,引导逻辑(读取配置…)应该 显然由viewmodel控制。您仍然可以使用ConfigSource, 它进行读取,并且可以在后台线程中运行

实现该源代码时,可以有一个接口,使其 易于与读取数据的配置源交换配置源 从数据库或其他地方。并且:您可以从 统一,从具体实现中分离更多 建造商注入此类:

i、 e.viewmodel已引导=>注入ConfigReader
=>调用ConfigReader(在BackgroundThread上)=>View get filled

在ctor中不执行复杂逻辑是一种很好的做法。如前所述,最好定义
Initialize()
方法(如果它是
IInitializable
接口的成员,则更好)

如果你的应用程序非常简单,并且没有计划对其进行太多扩展,那么你可以将
Model
ViewModel
层结合起来,在
ViewModel
中完成所有工作。但是如果你的应用程序足够复杂,
Model
类应该通过构造函数注入到
ViewModel
中类包含所有逻辑,ViewModel使用它们执行操作和显示数据