C# Wpf MVVM异步加载UI控件

C# Wpf MVVM异步加载UI控件,c#,asp.net,wpf,mvvm,asynchronous,C#,Asp.net,Wpf,Mvvm,Asynchronous,我有一个mvvm wpf应用程序,它一次加载一个由多个控件组成的窗口。我希望此窗口分别异步加载控件 有什么建议吗?不幸的是,如果您的控件是在XAML中定义的,那么将使用InitializeComponent调用对它们进行初始化,并完成加载过程。无论您是否订阅XAML窗口,加载XAML窗口中的所有事件都会发生 您可以在代码隐藏中动态地将控件添加到表单中,但是如果您有一个单独的线程来完成这项工作,则需要使用Application Dispatcher CheckAccess和Invoke方法来确保控

我有一个mvvm wpf应用程序,它一次加载一个由多个控件组成的窗口。我希望此窗口分别异步加载控件


有什么建议吗?

不幸的是,如果您的控件是在XAML中定义的,那么将使用InitializeComponent调用对它们进行初始化,并完成加载过程。无论您是否订阅XAML窗口,加载XAML窗口中的所有事件都会发生


您可以在代码隐藏中动态地将控件添加到表单中,但是如果您有一个单独的线程来完成这项工作,则需要使用Application Dispatcher CheckAccess和Invoke方法来确保控件加载到拥有它们的线程上。

就此而言,我使用单例模式。如果您熟悉PRISM及其引导程序,它有点类似

这里的主要思想是覆盖App.xaml中的方法
OnStartup
。默认行为显示在xaml
StartupUri=“MainWindow.xaml”
中,您必须删除该属性

OnStartup
override方法中,我使用一个类来创建我的所有对象(视图、视图模型、链接数据上下文…),并在初始化完成时触发一个事件

此时,我关闭splashscreen并显示一个完全加载的应用程序(当您创建
主窗口时会调用
InitializeComponent
,因此此时它已经被调用)

为了更广泛地使用,您可以在windows中添加事件,并在引导程序类中添加事件处理程序。例如,当我想完全刷新我的应用程序(重新启动它)时,我会使用它,也会使用它来请求数据库(在我的例子中,只有在应用程序启动时才执行这些请求以加载引用)

希望有帮助:)