我有一个显示服务器的WPF应用程序。
我有一个区域基本上有两个可能的视图,一个是欢迎屏幕,另一个是正在运行的实例信息
目前流程如下:
问题是Prism似乎在我注册后立即初始化了我的“InstanceInformation”视图的ViewModel:
m_regionManager.RegisterViewWithRegion(RegionsNames.MAIN_TAB_REGION, typeof(StatusView));
这是早期的方法,因为这个ViewModel需要一些尚未初始化的服务(因为他们甚至不知道我们选择了哪个服务器)。
有没有办法在我们导航到它时实例化导航视图的ViewModel?
答案 0 :(得分:1)
当您想立即导航到该视图时,您只能使用RegisterViewWithRegion。不要使用此功能,除非您希望在创建区域后立即在区域中显示您的视图。否则使用IRegion.Add或RequestNavigate。
答案 1 :(得分:1)
有没有办法在我们导航到它时实例化导航视图的ViewModel?
首次导航到视图时(通过调用RegionManager.RequestNavigate("nameOfTheView")
),将创建视图模型,除非您实施IRegionMemberLifetime
并返回false
KeepAlive
,在这种情况下,视图及其视图模型将在每次导航时重新创建。
要使导航工作,您必须使用Container.RegisterTypeForNavigation<TypeOfTheView>("nameOfTheView")
将视图称为导航目标...如果"nameOfTheView"
恰好是nameof(TypeOfTheView)
,您可以省略参数,因为它是默认值。
附注:如果您实施OnNavigatedTo
,则可以使用导航传递参数INavigationAware
,无论您是重新使用视图/视图模型还是重新创建它们。