2016-05-15 8 views
1

schon seit Tagen stecken ... und dann fand ich, was war das ProblemPrism für Xamarin.Forms: Ich kann die Navigation lösen, es sei denn, wenn ViewModelLocator.AutowireViewModel = „True“

Ich habe zwei Seiten ein, falls der Tablette und der andere im Falle des Telefons. Da sie unterschiedliche Namen haben, funktioniert die Verwendung von ViewModelLocator.AutowireViewModel, um dasselbe Ansichtsmodell als Bindungskontext zu verwenden, nicht. In diesem Fall verwende ich den klassischen Binding-Kontext, da ich keine Viewmodel-Kopie für jede Seite erstellen wollte. Mein Problem war, als ich es ausführte, gibt mir eine Fehlermeldung "kein parameterloser Konstruktor für dieses Objekt Prisma definiert" Der Grund für diesen Fehler ist, dass das ViewModel einen Konstruktor hat, der ein NavigationService erwartet. Um diesen Fehler zu beheben, muss ich den Navigationsdienst als Argument entfernen, aber dann brauche ich es, damit ich damit navigieren kann.

Antwort

1

In diesem Fall würde ich die ViewModelLocationProvider.Register-Methode empfehlen. So in der RegisterTypes Methode der Anwendung, können Sie einen Zustand ähnlich wie diese setzen können:

if (Device.Idiom == TargetIdiom.Tablet) 
    ViewModelLocationProvider.Register("MainPage",() => your logic); 
else 
    ViewModelLocationProvider.Register("MainPage",() => your logic); 

EDIT: Eigentlich, werden Sie noch haben, um manuell den INavigationService lösen es auf diese Art und Weise zu tun. Ich werde Ihr Prism-Problem erneut öffnen. Wir können die Methode ViewModelocationProvider.Register verbessern, um dieses Szenario zu aktivieren.

+0

Danke Mann, nur um zu bestätigen, dass Sie Ihren Vorschlag in Bezug auf das gleiche Viewmodel haben, meinen Sie mit "Ihrer Logik" in Ihrem Code snippit, dass es MainPageViewModel() zurückgeben kann? Und Sie manuell den INavigationService über die Konstruktoren übergeben? – BraveHeart

+1

Ja, hier würden Sie Ihre Instanz des ViewModels zurückgeben. Das Problem ist, dass Sie immer noch dafür verantwortlich sind, den INavigationService zu erstellen und ihn in den ctor zu übergeben. Sie können sehen, was hier getan werden müsste https://github.com/PrismLibrary/Prism/blob/master/Source/Xamarin/Prism.Unity.Forms/PrismApplication.cs#L49 –

+0

Deshalb sollten wir den ViewModelLoctor verbessern um Registrierungstypen zu unterstützen, nicht nur Instanzen. Ich habe dein Problem erneut geöffnet. Könnten Sie bitte das Szenario bestätigen und mir helfen, das für Sie zu beheben? –

Verwandte Themen