如何在 Prism 中实例化所有视图
How to instantiate all the views in Prism
下面你可以看到我的引导程序。我想从引导程序注册所有视图。
当我启动应用程序时,会创建 WebView 和 EditView。 GeneralView 是 EditView 的一部分,我必须先导航到 EditView 才能实例化它。
如何在启动可执行文件时实例化所有视图?
class Bootstrapper : UnityBootstrapper
{
protected override DependencyObject CreateShell()
{
// Register views
IRegionManager regionManager = this.Container.Resolve<IRegionManager>();
regionManager.RegisterViewWithRegion("ContentRegion", typeof(WebView));
regionManager.RegisterViewWithRegion("ContentRegion", typeof(EditView));
// The following view is instantiated for the first time when I navigate to EditView
regionManager.RegisterViewWithRegion("GeneralRegion", typeof(GeneralView));
return Container.Resolve<MainWindow>();
}
protected override void InitializeShell()
{
Application.Current.MainWindow.Show();
}
protected override void InitializeModules()
{
base.InitializeModules();
}
}
视图在实际显示在屏幕上之前不应实例化。此外,视图应该只定义用户界面。
如果您希望在使用来自另一个视图模型的事件聚合器发送事件时特定视图模型处于活动状态,那么您实际上是在这两个视图模型之间引入了间接耦合。而这正是您首先要通过使用事件聚合器来避免的。
因此,如果您依赖所有正在处理的事件,您可能应该考虑使用在引导程序中实例化为单例的共享服务。然后,您可以使用此共享服务注入您的视图模型,并通过服务接口在它们之间进行通信。
下面你可以看到我的引导程序。我想从引导程序注册所有视图。 当我启动应用程序时,会创建 WebView 和 EditView。 GeneralView 是 EditView 的一部分,我必须先导航到 EditView 才能实例化它。 如何在启动可执行文件时实例化所有视图?
class Bootstrapper : UnityBootstrapper
{
protected override DependencyObject CreateShell()
{
// Register views
IRegionManager regionManager = this.Container.Resolve<IRegionManager>();
regionManager.RegisterViewWithRegion("ContentRegion", typeof(WebView));
regionManager.RegisterViewWithRegion("ContentRegion", typeof(EditView));
// The following view is instantiated for the first time when I navigate to EditView
regionManager.RegisterViewWithRegion("GeneralRegion", typeof(GeneralView));
return Container.Resolve<MainWindow>();
}
protected override void InitializeShell()
{
Application.Current.MainWindow.Show();
}
protected override void InitializeModules()
{
base.InitializeModules();
}
}
视图在实际显示在屏幕上之前不应实例化。此外,视图应该只定义用户界面。
如果您希望在使用来自另一个视图模型的事件聚合器发送事件时特定视图模型处于活动状态,那么您实际上是在这两个视图模型之间引入了间接耦合。而这正是您首先要通过使用事件聚合器来避免的。
因此,如果您依赖所有正在处理的事件,您可能应该考虑使用在引导程序中实例化为单例的共享服务。然后,您可以使用此共享服务注入您的视图模型,并通过服务接口在它们之间进行通信。