1

クリックTabbedNavigationContainerを使用して特定のタブ付きページを呼び出す方法を知りたいです。ToolBarItem私はBaseContentPage基本クラスを持っています

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

これによりビューが開き、タブ付きのアプリケーションが表示されます。私の質問は、 「メインページ」をクリックしMapたときにページを選択するにはどうすればよいですか?ToolbarItem

注入される独自の基本的なナビゲーション サービスを作成できることは承知していAppますが、FreshMvvm の可能性を十分に活用していないように見えますか?

御時間ありがとうございます。

4

1 に答える 1

1

プロジェクトの構造については完全にはわかりませんが、実際のページの分離コードにナビゲーションを追加しようとしていると思いますか? これを行うことはできますが、MVVM の原則に多少反します。それでもやりたい場合は、おそらく次のようにする必要があります。

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

うまくいくはずですが、最善の方法ではありません。

Commandバインド可能な のプロパティを割り当て、ToolBarItemそのコマンドを実装するその背後に 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 の方法でそれに移動しています。

于 2016-11-01T07:51:20.803 に答える