2016-06-06 13 views
2

Ich habe die grundlegende Prism/Unity/Xamarin Forms App aus den Prism-Vorlagen.INavigationService als MainPage Konstruktor Argument

Wenn ich die folgende (add-Parameter) ändern scheitert es

public MainPage(INavigationService navigationService) 
{ 
    InitializeComponent(); 
} 

Arbeiten Behälter aber auf diese Weise den Navigationsdienst immer verursacht Mainpage nicht gefunden werden.

Gibt es eine bessere Möglichkeit für eine ContentPage, den Navigationsdienst zu erhalten, damit ein Klick auf eine neue Seite navigieren kann?

Ich habe auch versucht, den Navigationsdienst von OnInitialized zu registrieren, wie ich in einigen Beispielen gefunden habe, und das ist jetzt ein Kompilierfehler.

Mit folgenden Pakete/Versionen:

  • Prism.Unity.Forms 6.2.0.pre4
  • Prism.Forms 6.1.0.pre4
  • Xamarin.Forms 2.2.0.45
  • Unity 4.0.1
  • Windows-10 UWP
+0

Können Sie eine grundlegende Demo veröffentlichen, die dieses Problem reproduzieren können? –

+0

Die Antwort unten half mir, das Problem zu finden. Vielen Dank für Ihr Interesse an diesem Thema. –

Antwort

3

Prism ist ein Framework erstellen Sie Ihre App helfen s mit MVVM. Wenn Sie sich MVVM und die verwendeten Praktiken ansehen, werden Sie bemerken, dass der Code hinter Ihrer Seite auf ein Minimum beschränkt ist und die Logik in das Viewmodel verschoben wird.

Wenn Sie dies auf Ihren Code anwenden, sollten Sie die Seite INavigationService NICHT zu Ihrer Seite hinzufügen, da die Navigation aus dem Ansichtsmodell erfolgen soll.

Jetzt höre ich Sie fragen: "aber wie komme ich von meinem Klick zum Viewmodel?". Dies geschieht mit einem Befehl.

<Button Text="Navigate to speak page" Command="{Binding NavigateToSpeakPageCommand}" /> 

Ich schlage vor, Sie haben einen Blick auf die Dokumentation und Proben auf dem Prism-Repository:

+0

Sie haben Recht, ich nahm eine Abkürzung, um das schnell zu erledigen. Es war interessant, dass der Code dahinter nicht den Navigationsdienst bekommen konnte, sondern das View-Modell. Danke, dass du so schnell geholfen hast. –

+1

Aus diesem Grund können Sie den INavigationService in der Ansicht nicht erhalten, um Sie vor sich selbst zu schützen. Um zu verhindern, dass du versuchst, das zu tun, was du gerade versucht hast :) –