2017-08-07 2 views
1

Voici mon code qui ne fonctionne pas, pourriez-vous repérer ce qui ne va pas?Impossible d'obtenir ce MasterDetail pour travailler avec Prism et listview

Je suis en train de convertir en prisme https://github.com/xamarin/xamarin-forms-samples/tree/master/Navigation/MasterDetailPage

Je continue à obtenir

"System.InvalidOperationException: PushAsync est pas prise en charge à l'échelle mondiale sur Android, s'il vous plaît utiliser un NavigationPage."

J'utilise un navigationpage (je pense que je fais)

Quelqu'un pourrait-il regarder le code .Below est tout le code et dites-moi ce que je fais mal ??

merci beaucoup!

app.cs

public partial class App : PrismApplication 
     { 
      public App(IPlatformInitializer initializer = null) : base(initializer) { } 

      protected override void OnInitialized() 
      { 
        InitializeComponent(); 

        NavigationService.NavigateAsync("MainPage/Navigation/ContactsPage");       
      } 

      protected override void RegisterTypes() 
      { 
       //Container.RegisterTypeForNavigation<NavigationPage>("Navigation"); 
       Container.RegisterTypeForNavigation<MainNavigationPage>("Navigation"); 

       Container.RegisterTypeForNavigation<MainPage,MainPageViewModel>(); 

       Container.RegisterTypeForNavigation<ContactsPage,ContactsPageViewModel>(); 
       Container.RegisterTypeForNavigation<MasterPage,MasterPageViewModel>(); 
       Container.RegisterTypeForNavigation<ReminderPage,ReminderPageViewModel>(); 
       Container.RegisterTypeForNavigation<TodoListPage,TodoListPageViewModel>(); 

      } 
     } 

MainNavigationPage.Xaml

<?xml version="1.0" encoding="utf-8" ?> 
    <NavigationPage xmlns="http://xamarin.com/schemas/2014/forms" 
        xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
        xmlns:prism="clr-namespace:Prism.Mvvm;assembly=Prism.Forms" 
        prism:ViewModelLocator.AutowireViewModel="True" 
        x:Class="MasterDetailReferenceApp.Views.MainNavigationPage"> 

    </NavigationPage> 

MainPage.xaml

<?xml version="1.0" encoding="utf-8" ?> 
     <MasterDetailPage xmlns="http://xamarin.com/schemas/2014/forms" 
        xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
        xmlns:prism="clr-namespace:Prism.Mvvm;assembly=Prism.Forms" 
        xmlns:views="clr-namespace:MasterDetailReferenceApp.Views;assembly=MasterDetailReferenceApp" 
        prism:ViewModelLocator.AutowireViewModel="True" 
        x:Class="MasterDetailReferenceApp.Views.MainPage" 
        Title="MainPage"> 
      <MasterDetailPage.Master> 
    <views:MasterPage x:Name="masterPage" /> 
</MasterDetailPage.Master> 
<MasterDetailPage.Detail> 
    <NavigationPage> 
     <x:Arguments> 
      <views:ContactsPage /> 
     </x:Arguments> 
    </NavigationPage> 
</MasterDetailPage.Detail> 

MainPage.cs

public partial class MainPage : MasterDetailPage,IMasterDetailPageOptions 
     { 
      public MainPage() 
      { 
       InitializeComponent(); 
      } 

      public bool IsPresentedAfterNavigation => Device.Idiom != TargetIdiom.Phone; 
     } 

<?xml version="1.0" encoding="utf-8" ?> 
    <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 
       xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
       xmlns:prism="clr-namespace:Prism.Mvvm;assembly=Prism.Forms" 
       prism:ViewModelLocator.AutowireViewModel="True" 
       x:Class="MasterDetailReferenceApp.Views.MasterPage"    
       Icon="hamburger.png" 
       Title="Personal Organiser"> 
     <ContentPage.Content> 
      <StackLayout VerticalOptions="FillAndExpand"> 
       <ListView x:Name="listView" 
          RowHeight="60" 
          SeparatorVisibility="None" 
          BackgroundColor="White" 
          HasUnevenRows="true" 
          ItemSelected="OnMenuItemSelected"> 
          > 
        <ListView.ItemTemplate> 
         <DataTemplate> 
          <ImageCell Text="{Binding Title}" ImageSource="{Binding IconSource}" /> 
         </DataTemplate> 
        </ListView.ItemTemplate> 
       </ListView> 
      </StackLayout> 
     </ContentPage.Content> 
    </ContentPage> 

MasterPage.cs

public partial class MasterPage : ContentPage 
    { 
     public ListView ListView => listView; 

     public MasterPage() 
     { 
      InitializeComponent(); 

      var masterPageItems = new List<MasterPageItem>(); 
      masterPageItems.Add(new MasterPageItem 
      { 
       Title = "Contacts", 
       //Uri = "ContactsPage", 
       Uri = "Navigation/ContactsPage", 
       IconSource = "contacts.png", 
       TargetType = typeof(ContactsPage) 
      }); 
      masterPageItems.Add(new MasterPageItem 
      { 
       Title = "TodoList", 
       Uri = "Navigation/TodoListPage", 
       //Uri = "TodoListPage", 
       IconSource = "todo.png", 
       TargetType = typeof(TodoListPage) 
      }); 
      masterPageItems.Add(new MasterPageItem 
      { 
       Title = "Reminders", 
       Uri = "Navigation/RemindersPage", 
       IconSource = "reminders.png", 
       TargetType = typeof(ReminderPage) 
      }); 


      listView.ItemsSource = masterPageItems; 
     } 

     private void OnMenuItemSelected(object sender, SelectedItemChangedEventArgs e) 
     { 
      var item = (MasterPageItem)e.SelectedItem; 

      ((MasterPageViewModel)BindingContext).NavigateCommand.Execute(item.Uri); 

     } 
    } 

MasterPageItem

public class MasterPageItem 
      { 
       public string Title { get; set; } 
       public string Uri { get; set; } 
       public string IconSource { get; set; } 
      } 
+0

Quand ne se produit l'exception? Après le démarrage de l'application? Ou lorsque vous cliquez sur le menu de gauche? Modification dans App.cs NavigationService.NavigateAsync ("MainPage/Navigation/ContactsPage"); à "MainPage/MainNavigationPage/ContactsPage" aidera? – lowleetak

+0

Merci d'avoir repéré cela mais toujours la même erreur – developer9969

Répondre

0

Vous devez définir quelques NavigationPage comme détail pour MasterDetailPage. Comme ceci:

<MasterDetailPage.Detail> 
     <NavigationPage BarTextColor="White"> 
      <x:Arguments> 
       <local:StatisticsPage /> 
      </x:Arguments> 
     </NavigationPage> 
    </MasterDetailPage.Detail> 

Dans cet exemple, la première page de la page de navigation sera StatisticsPage.
Ensuite, à partir StatisticsPageViewModel vous pouvez faire

await _navigationService.NavigateAsync(new Uri(navParam, UriKind.Relative), useModalNavigation: isModal); 

où navParam est nameof(SettingsPage). Cela va passer le contenu NavigationPage à SettingsPage.

Si vous voulez naviguer loin de MasterDetailPage puis faire

await NavigationService.NavigateAsync(nameof(OtherNonMasterDetailPage)); 

de votre MasterDetailPageViewModel (pas de modèle de vue du contenu NavigationPage)

+0

merci pour votre réponse .Il me rend fou.voir la question éditée J'ai modifié la page masterDetail mais j'ai toujours la même erreur lorsque je sélectionne une page du menu.c'est la seule modification que j'ai faite – developer9969

+0

'protected override void OnInitialized() { InitializeComponent(); NavigationService.NavigateAsync (nom de (MainPage)); } ' –

+0

Toujours la même erreur .. heureux d'envoyer une solution par e-mail ou de télécharger quelque part – developer9969