2016-10-31 30 views
0

の特定のタブ付きページをToolBarItemクリックして呼び出す方法を知りたいと思います。私は、BaseContentPageベースクラスFreshMvvmでToolBarItemを使用してTabbedページに移動する

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);

はそれが動作するはずですが、それが最善の方法ではありません。

のバインド可能なCommandプロパティを割り当て、そのコマンドを実装する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> 

は今GoToMainPageCommandを実装して、このページのPageModelを作成します。

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の方法でナビゲートしています。

関連する問題