Laden...

Wie in einer Xamarin.Shell Anwendung eine neue Seite aufrufen und einen Parameter übergeben?

Erstellt von Kriz vor 3 Jahren Letzter Beitrag vor 3 Jahren 1.481 Views
K
Kriz Themenstarter:in
141 Beiträge seit 2017
vor 3 Jahren
Wie in einer Xamarin.Shell Anwendung eine neue Seite aufrufen und einen Parameter übergeben?

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!

U
69 Beiträge seit 2019
vor 3 Jahren

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.”

  • Patrick to Spongebob
4.919 Beiträge seit 2008
vor 3 Jahren

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'

?