2016-10-31 5 views
0

Я хотел бы знать, как я могу назвать конкретную страницу с вкладками моего TabbedNavigationContainer, используя клик ToolBarItem. У меня есть базовый класс BaseContentPageПереход к вкладке с помощью ToolBarItem с FreshMvvm

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?

Спасибо за ваше время.

ответ

0

Я не совсем уверен в структуре вашего проекта, но я думаю, что вы пытаетесь добавить навигацию к коду вашей реальной страницы вправо? Хотя вы можете это сделать, это несколько противоречит принципу 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.

Смежные вопросы