【问题标题】:Navigate to new navigation page from ViewModel with Xamarin XLabs使用 Xamarin XLabs 从 ViewModel 导航到新导航页面
【发布时间】:2015-04-13 12:41:07
【问题描述】:

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

我的 App.cs 中有这个 sn-p,它创建了一个新的导航页面并将 ViewModel 绑定到 View

MainPage = new NavigationPage((Page)ViewFactory.CreatePage<MainViewModel, MainView>());

sn-p来自这篇文章getting started xamarin forms labs xaml mvvm ioc@《5.用ViewFactory注册View》

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

文章摘录:

public class App : Application
{
    public App()
    {
        RegisterViews();
        MainPage = new NavigationPage((Page)ViewFactory.CreatePage<MainViewModel, MainView>());
    }

    private void RegisterViews()
    {
        ViewFactory.Register<MainView, MainViewModel>();
    }
}

【问题讨论】:

    标签: mvvm navigation xamarin viewmodel


    【解决方案1】:

    不确定我是否很好地理解了您的问题,但是,这就是我所做的: 首先在您的 AppDelegate(或主要活动)中注册您的依赖注入模块(此处为简单容器的 IDependencyContainer):

            var resolverContainer = new SimpleContainer();
            UserService us = new UserService();
    
            var app = new XFormsAppiOS();
            resolverContainer.Register<IDevice>(t => AppleDevice.CurrentDevice)
                .Register<IDisplay>(t => t.Resolve<IDevice>().Display)
                .Register<IXFormsApp>(app)
                .Register<IJsonSerializer, JsonSerializer>()
                .Register<IDependencyContainer>(resolverContainer);
            Resolver.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
    

    在你的 viewModel 中推送到你需要的页面

    await Resolver.Resolve<INavigation>().PushAsync((ParameterPage)ViewFactory.CreatePage<ParameterViewModel, ParameterPage>(), false);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多