簡體   English   中英

使用Xamarin XLabs從ViewModel導航到新的導航頁面

[英]Navigate to new navigation page from ViewModel with Xamarin XLabs

我正在嘗試從ViewModel導航到新的導航頁面

我的App.cs中有此代碼段,它創建了一個新的導航頁面並將ViewModel綁定到View

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

該摘錄摘自本文入門xamarin表單實驗室xaml mvvm ioc @“ 5.向ViewFactory注冊視圖”

但是,我們將如何在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>();
    }
}

不確定我是否很好地回答了您的問題,但是,這就是我的工作:首先在您的AppDelegate(或主要活動)中注冊您的依賴注入模塊(此處為simpleContainer的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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM