Mvvm 使用Xamarin XLabs从ViewModel导航到新的导航页面

Mvvm 使用Xamarin XLabs从ViewModel导航到新的导航页面,mvvm,navigation,xamarin,viewmodel,Mvvm,Navigation,Xamarin,Viewmodel,我正在尝试从ViewModel导航到新的导航页面 我的App.cs中有这个片段,它创建了一个新的导航页面,并将ViewModel绑定到视图 MainPage = new NavigationPage((Page)ViewFactory.CreatePage<MainViewModel, MainView>()); MainPage=newNavigationPage((Page)ViewFactory.CreatePage()); 该片段来自本文@“5.向ViewFactory注

我正在尝试从ViewModel导航到新的导航页面

我的App.cs中有这个片段,它创建了一个新的导航页面,并将ViewModel绑定到视图

MainPage = new NavigationPage((Page)ViewFactory.CreatePage<MainViewModel, MainView>());
MainPage=newNavigationPage((Page)ViewFactory.CreatePage());
该片段来自本文@“5.向ViewFactory注册视图”

但是,我们在ViewModel中如何做到这一点呢?当我们使用ViewFactory.Register将ViewModel和视图绑定在一起时,创建一个新页面并将它们绑定在一起是否有意义

文章片段:

公共类应用程序:应用程序
{
公共应用程序()
{
RegisterViews();
MainPage=newNavigationPage((Page)ViewFactory.CreatePage());
}
私有void RegisterViews()
{
Register();
}
}

我不确定我是否理解你的问题,但我的工作如下: 首先在AppDelegate(或主活动)中注册依赖项注入模块(此处是simpleContainer的IDependencyContainer):

var resolverContainer=new SimpleContainer();
UserService us=新的UserService();
var app=new XFormsAppiOS();
resolverContainer.Register(t=>AppleDevice.CurrentDevice)
.Register(t=>t.Resolve().Display)
.注册(应用程序)
.Register()
.注册(ResolderContainer);
SetResolver(resolverContainer.GetResolver());
然后在你的app.cs上,确保注册导航服务到你的主导航页面

Page loginPage = new NavigationPage((LoginPage)ViewFactory.CreatePage<LoginViewModel, LoginPage>());
MainPage = loginPage;
Resolver.Resolve<IDependencyContainer>()
   .Register<INavigationService>(t => new NavigationService(MainPage.Navigation)) //New Xlabs nav service
   .Register<INavigation>(t => MainPage.Navigation); // old Xlabs nav service
Page loginPage=newNavigationPage((loginPage)ViewFactory.CreatePage());
主页=登录页面;
解析程序
.Register(t=>newNavigationService(MainPage.Navigation))//新的Xlabs导航服务
.Register(t=>MainPage.Navigation);//旧Xlabs导航服务
在viewModel中,按需进入页面

await Resolver.Resolve<INavigation>().PushAsync((ParameterPage)ViewFactory.CreatePage<ParameterViewModel, ParameterPage>(), false);
wait Resolver.Resolve().PushAsync((参数页)ViewFactory.CreatePage(),false);
Page loginPage = new NavigationPage((LoginPage)ViewFactory.CreatePage<LoginViewModel, LoginPage>());
MainPage = loginPage;
Resolver.Resolve<IDependencyContainer>()
   .Register<INavigationService>(t => new NavigationService(MainPage.Navigation)) //New Xlabs nav service
   .Register<INavigation>(t => MainPage.Navigation); // old Xlabs nav service
await Resolver.Resolve<INavigation>().PushAsync((ParameterPage)ViewFactory.CreatePage<ParameterViewModel, ParameterPage>(), false);