2016-10-31 64 views
0

我想知道如何使用ToolBarItem單擊來調用我的TabbedNavigationContainer的特定選項卡式頁面。我有一個BaseContentPage基類使用FreshMvvm的ToolBarItem導航到TabbedPage

public class BaseContentPage : ContentPage, IPage 
{ 
    public BaseContentPage() 
    { 
     ToolbarItems.Add(new ToolbarItem("Main Page", null,() => 
     { 
      //Application.Current.MainPage = ??; 
     })); 
    } 
} 

從所有頁面的導出。

public class App : Application 
{ 
    public App() 
    { 
     Registrations(); 
     InitializeGui(); 
    } 

    private void Registrations() 
    { 
     //FreshIOC.Container.Register<IFreshNavigationService 
    } 

    private void InitializeGui() 
    { 
     var tabbedNavigationContainer = new FreshTabbedNavigationContainer(); 
     tabbedNavigationContainer.AddTab<MapPageModel>("Map", "icon.png"); 
     tabbedNavigationContainer.AddTab<HistoryPageModel>("History", "icon.png"); 
     MainPage = tabbedNavigationContainer; 
    } 
} 

這打開我的看法,我可以看到我的選項卡式應用程序。我的問題是,如何在點擊ToolbarItem「主頁」時選擇Map頁面?

我知道我可以編寫我自己的基本導航服務,其中App被注入,但這看起來好像我沒有使用FreshMvvm的全部潛力?

謝謝你的時間。

回答

0

我不完全確定你的項目的結構,但我想你試圖將導航添加到實際頁面的代碼隱藏權利?儘管你可以這樣做,但它有點違背MVVM原則。如果你還是會想這樣做,你可能會做這樣的事情:

FreshIOC.Container.Resolve<IFreshNavigationService>().PushPage (FreshPageModelResolver.ResolvePageModel<MainPageModel>(null), null);

雖然它應該工作,它是不是最好的方法。

您應該指定ToolBarItemCommand屬性,該屬性可綁定並在其後創建一個實現該命令的PageModel。

我要你使用XAML來承擔,這樣你的XAML看起來就像這樣:

<?xml version="1.0" encoding="utf-8" ?> 
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" Title="MyPage"> 
    <ContentPage.ToolbarItems> 
     <ToolbarItem Text="Main Page" Command="{Binding GoToMainPageCommand}" /> 
    </ContentPage.ToolbarItems> 

    <!-- ... Rest of page ... --> 
</ContentPage> 

現在創建一個PageModel此頁它實現了GoToMainPageCommand

public class MyPagePageModel : FreshBasePageModel 
{ 
    public ICommand GoToMainPageCommand { get; private set; } 

    public MyPagePageModel() 
    { 
     GoToMainPageCommand = new Command(GoToPage); 
    } 

    private async void GoToPage() 
    { 
     await CoreMethods.PushPageModel<MainPageModel>(); 
    } 
} 

現在您以真正的MVVM方式導航到它。