Ich möchte innerhalb ausgewählten Seiten eine Zurück-Taste aufzunehmen. Aus irgendeinem Grund habe ich es "Breadcrumb" genannt, bitte nenne es "BackButton" :).umfassen XAML in XAML auf Xamarin Formen mit Prisma mvvm View-Modell. Kann nicht lösen INavigationService
Das Problem ist, dass der Navigationsdienst in der ioc bekommt nicht durchgezogen.
Hier ist der folgende Code mit Ausnahme i über komme:
Hauptseite XAML-Bekanntmachung der lokalen: BreadcrumbControl
<?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="Test.Views.MainPage"
xmlns:local="clr-namespace:Test.Views">
<StackLayout>
<local:BreadcrumbControl x:Name="Breadcrumb" />
</Stacklayout>
<ContentPage>
Brotkrumen-Steuerung XAML
<?xml version="1.0" encoding="utf-8" ?>
<ContentView 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="Test.Views.BreadcrumbControl">
<Button Text="Back" Command="{Binding NavigateCommand}" CommandParameter="NavigationPage/ManageFoodGroupsPage" />
</ContentView>
Brotkrumen-Page View Modell
public class BreadcrumbControlViewModel : BindableBase
{
INavigationService navigationService;
public DelegateCommand<string> NavigateCommand { get; set; }
// If i uncomment the navigationservice the following error occurs (*)
public BreadcrumbControlViewModel(/*INavigationService navigationService*/)
{
this.navigationService = navigationService;
NavigateCommand = new DelegateCommand<string>(Navigate);
}
private void Navigate(string name)
{
navigationService.GoBackAsync();
}
}
(*)
Eine Ausnahme vom Typ 'Microsoft.Practices.Unity.ResolutionFailedException' in Microsoft.Practices.Unity.dll aufgetreten war aber nicht im Benutzercode behandelt
Weitere Informationen: Auflösung der Abhängigkeit fehlgeschlagen, type = "Test.ViewModels.Bread crumbControlViewModel ", name =" (keine) ".
Ausnahme beim: Auflösen Parameter "Navigation" von Konstruktor Test.ViewModels.BreadcrumbControlViewModel (Prism.Navigation.INavigationService Navigation).
Ausnahme ist: Nullreferenceexception - Objektreferenz auf eine Instanz eines Objekts nicht gesetzt.
Zum Zeitpunkt der Ausnahme, war der Behälter:
Resolving Test.ViewModels.BreadcrumbControlViewModel, (none)
Auflösen Parameter "Navigation" von Constructor Test.ViewModels.BreadcrumbControlViewModel (Prism.Navigation.INavigationService Navigation)
A pp.cs Container/Resolver Registrierung
ViewModelLocationProvider.Register<BreadcrumbControl, BreadcrumbControlViewModel>();
Container.RegisterTypeForNavigation<MainPage>();
Wie ich mich über eine gemeinsame Back-Button Stil Sache einschließlich (durch ein Ansichtsmodell angetrieben) in einem Xamarin Forms Prism MVVM-Anwendung.
#Startruck - Danke Brian, tolles Gespräch Sie auf Prism getan haben. Ich hatte bemerkt, dass es nicht möglich war, eine Seite in den XAML einzubetten, und deshalb griff ich auf die Ansicht zurück. Was ist Ihr Ansatz, wiederverwendbare Bits so zu bekommen? z.B. Ein Back-Button in vielen Seiten platziert ... während ich es an ein Model gebunden habe :) – Jimmyt1988
Ich bin auf eine andere Art und Weise gegangen und habe ein Baseview-Model mit einigen der gebräuchlicheren Navigations-Bits erstellt. Ich denke, ich werde es jetzt tun müssen Finden Sie heraus, wie Sie stattdessen Ressourcen verwenden, die das Problem lösen sollten: D – Jimmyt1988
Eine andere Möglichkeit, den Navigationsdienst zu erhalten, besteht darin, eine neue Schnittstelle namens INavigationServiceAware zu erstellen und dann den COnfigureViewModelLocator zu überschreiben und dann eine benutzerdefinierte Implementierung für die Auflösung von Objekten bereitzustellen. Sie können ein Beispiel hier sehen https://github.com/PrismLibrary/Prism/blob/master/Source/Xamarin/Prism.Unity.Forms/PrismApplication.cs#L26 –