C# Wpf MVVM异步加载UI控件
我有一个mvvm wpf应用程序,它一次加载一个由多个控件组成的窗口。我希望此窗口分别异步加载控件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方法来确保控
有什么建议吗?不幸的是,如果您的控件是在XAML中定义的,那么将使用InitializeComponent调用对它们进行初始化,并完成加载过程。无论您是否订阅XAML窗口,加载XAML窗口中的所有事件都会发生
您可以在代码隐藏中动态地将控件添加到表单中,但是如果您有一个单独的线程来完成这项工作,则需要使用Application Dispatcher CheckAccess和Invoke方法来确保控件加载到拥有它们的线程上。就此而言,我使用单例模式。如果您熟悉PRISM及其引导程序,它有点类似 这里的主要思想是覆盖App.xaml中的方法
OnStartup
。默认行为显示在xamlStartupUri=“MainWindow.xaml”
中,您必须删除该属性
在OnStartup
override方法中,我使用一个类来创建我的所有对象(视图、视图模型、链接数据上下文…),并在初始化完成时触发一个事件
此时,我关闭splashscreen并显示一个完全加载的应用程序(当您创建主窗口时会调用InitializeComponent
,因此此时它已经被调用)
为了更广泛地使用,您可以在windows中添加事件,并在引导程序类中添加事件处理程序。例如,当我想完全刷新我的应用程序(重新启动它)时,我会使用它,也会使用它来请求数据库(在我的例子中,只有在应用程序启动时才执行这些请求以加载引用)
希望有帮助:)