Xamarin.forms 在Prism.Unity.Forms中注销视图和视图模型
我正在为我的Xamarin表单应用程序使用带Unity容器的Prism 我在哪里注册我的页面像这样Xamarin.forms 在Prism.Unity.Forms中注销视图和视图模型,xamarin.forms,unity-container,prism,Xamarin.forms,Unity Container,Prism,我正在为我的Xamarin表单应用程序使用带Unity容器的Prism 我在哪里注册我的页面像这样 Container.RegisterTypeForNavigation<ViewType,ViewModelType>(); 没有运气 我想注销的原因 我有两种看法 Project.Namespace1.ViewA Project.Namespace2.ViewA 现在我想在某些情况下打开Project.Namespace1.ViewA,在其他情况下打开Project.Namesp
Container.RegisterTypeForNavigation<ViewType,ViewModelType>();
没有运气
我想注销的原因
我有两种看法
Project.Namespace1.ViewA
Project.Namespace2.ViewA
现在我想在某些情况下打开Project.Namespace1.ViewA,在其他情况下打开Project.Namespace2.ViewA
这可以按如下方式完成
NavigationService.NavigateAsync("ViewA");
它导航到Unity容器中注册的最后一个视图。
这就是为什么我想在注册新视图之前取消注册以前的视图。您应该导航到Project.Namespace1.ViewA和Project.Namespace2.ViewA或其他一些唯一的名称
RegisterTypeForNavigation采用可选的字符串参数作为名称,因此为每个视图传递一个唯一的名称。导航到ViewA时,应导航到要导航到的具体ViewA。如果您确实需要模拟register unregister行为,请创建一个包含当前活动ViewA的服务
例如:
Container.RegisterTypeForNavigation<Project.Namespace1.ViewA,ViewModelType>( "ViewA1" );
Container.RegisterTypeForNavigation<Project.Namespace2.ViewA,ViewModelType>( "ViewA2" );
interface IViewASelector
{
string ViewA { get; set; }
}
// register Namespace1 and unregister Namespace2
_viewASelector.ViewA ="ViewA1";
// navigate to the active ViewA
NavigationService.NavigateAsync( _viewASelector.ViewA );
可能您还需要一个枚举而不是一堆字符串。为什么要这样做?注销视图不会隐藏它,注销视图模型也不会处理任何事情。Unity没有现成的注销方法。您可以查看此答案以清除注册:。然而,我同意@Haukinger的观点,这可能不是一个好主意。你想实现什么?我已经更新了我的问题,并说明了取消注册视图背后的原因。希望这有帮助。好把戏。我现在就同意。顺便说一句,您现在有没有其他支持实际注销类型/实例的ioc容器?可能ninject有这个功能,因为它们有很多奇怪的功能;-unity也可以这样做,虽然是手动的,但对我来说,取消注册就像是在对抗容器,
Project.Namespace1.ViewA
Project.Namespace2.ViewA
NavigationService.NavigateAsync("ViewA");
Container.RegisterTypeForNavigation<Project.Namespace1.ViewA,ViewModelType>( "ViewA1" );
Container.RegisterTypeForNavigation<Project.Namespace2.ViewA,ViewModelType>( "ViewA2" );
interface IViewASelector
{
string ViewA { get; set; }
}
// register Namespace1 and unregister Namespace2
_viewASelector.ViewA ="ViewA1";
// navigate to the active ViewA
NavigationService.NavigateAsync( _viewASelector.ViewA );