Hallo zusammen,
ich möchte in einer Xamarin.Shell Anwendung eine neue Seite aufrufen und einen Parameter übergeben. Leider kommt der Parameter nicht an. hier mein Code:
private async void GetInformation(string ID)
{
Routing.RegisterRoute(nameof(Views.BookDetails), typeof(Views.BookDetails));
await Shell.Current.GoToAsync($"{nameof(Views.BookDetails)}?BookID={ID}");
}
Hier hat die ID noch einen Wert
[QueryProperty(nameof(BookID), nameof(BookID))]
public partial class BookDetails : ContentPage
{
public string BookID
{
get => id;
set
{
id = Uri.UnescapeDataString(value);
OnPropertyChanged();
}
}
public string id;
public BookDetails()
{
InitializeComponent();
BindingContext = new ViewModels.BookDetails_VM(string id);
}
Hier sollte die ID eigentlintlich ankommen, aber die Werte sind immer null.
Was übersehe ich? Ich hab zig Dokumentationen gelesen, aber irgendwo stimmt was nicht...
Schonmal vielen Dank!
Hallo Kriz,
ich würde mal vermuten, dass zuerst der Konstruktor aufgerufen wird und anschließend die Property mit dem "Query-Parameter" gefüllt wird.
Daher ist im Konstruktor die id noch nicht vorhanden => Du musst das ViewModel im BookID-setter erstellen. So wird es auch hier gemacht: Pass Data
Viele Grüße
“Knowledge cannot replace friendship. I'd rather be an idiot than lose you.”
Das sind aber Grundlagen der OOP, also bei jeder Objekterzeugung stehen im Konstruktor nur die übergebenen Parameter (falls angegeben) zur Verfügung und alle Member sind mit Default-Werten initialisiert.
Und du meintest wohl
BindingContext = new ViewModels.BookDetails_VM(id); // also ohne 'string'
?