Prism:声明一些需要一些服务工作的视图

时间:2016-10-20 14:14:35

标签: c# wpf mvvm prism

我有一个显示服务器的WPF应用程序。

我有一个区域基本上有两个可能的视图,一个是欢迎屏幕,另一个是正在运行的实例信息

目前流程如下:

  1. 启动应用程序
  2. 应用程序显示欢迎屏幕和一些选项以加载其中一个配置文件
  3. 选择要打开的服务器配置文件
  4. 服务器根据此配置初始化
  5. 初始化服务器后,我要求应用程序“导航”到另一个视图。
  6. 问题是Prism似乎在我注册后立即初始化了我的“InstanceInformation”视图的ViewModel:

    m_regionManager.RegisterViewWithRegion(RegionsNames.MAIN_TAB_REGION, typeof(StatusView));

    这是早期的方法,因为这个ViewModel需要一些尚未初始化的服务(因为他们甚至不知道我们选择了哪个服务器)。

    有没有办法在我们导航到它时实例化导航视图的ViewModel?

2 个答案:

答案 0 :(得分:1)

当您想立即导航到该视图时,您只能使用RegisterViewWithRegion。不要使用此功能,除非您希望在创建区域后立即在区域中显示您的视图。否则使用IRegion.Add或RequestNavigate。

答案 1 :(得分:1)

  

有没有办法在我们导航到它时实例化导航视图的ViewModel?

首次导航到视图时(通过调用RegionManager.RequestNavigate("nameOfTheView")),将创建视图模型,除非您实施IRegionMemberLifetime并返回false KeepAlive,在这种情况下,视图及其视图模型将在每次导航时重新创建。

要使导航工作,您必须使用Container.RegisterTypeForNavigation<TypeOfTheView>("nameOfTheView")将视图称为导航目标...如果"nameOfTheView"恰好是nameof(TypeOfTheView),您可以省略参数,因为它是默认值。

附注:如果您实施OnNavigatedTo,则可以使用导航传递参数INavigationAware,无论您是重新使用视图/视图模型还是重新创建它们。