Navigace prostředí .NET MAUI
Prostředí .NET Multi-Platform App UI (.NET MAUI) zahrnuje navigační prostředí založené na identifikátorech URI, které používá trasy k navigaci na libovolnou stránku v aplikaci, aniž by bylo nutné sledovat nastavenou navigační hierarchii. Kromě toho také poskytuje možnost přecházet zpět, aniž byste museli navštěvovat všechny stránky v navigačním zásobníku.
Třída Shell definuje následující vlastnosti související s navigacemi:
- BackButtonBehavior, typu BackButtonBehavior, připojená vlastnost, která definuje chování tlačítka Zpět.
CurrentItem
, typuShellItem
, aktuálně vybraná položka.CurrentPage
, typu Page, aktuálně prezentovaná stránka.CurrentState
, typuShellNavigationState
, aktuální navigační stav Shell.Current
, typu Shell, přetypovaný alias proApplication.Current.MainPage
.
Objekty BackButtonBehaviora CurrentItem
CurrentState
vlastnosti jsou podporovány BindableProperty objekty, což znamená, že tyto vlastnosti mohou být cílem datových vazeb.
Navigace se provádí vyvoláním GoToAsync metody z Shell třídy. Když se chystáte provést navigaci, Navigating
událost se aktivuje a Navigated
událost se aktivuje po dokončení navigace.
Poznámka:
Navigace se dá dál provádět mezi stránkami v aplikaci Shell pomocí Navigation
vlastnosti. Další informace naleznete v tématu Provádění bezmodální navigace.
Trasy
Navigace se provádí v aplikaci Prostředí zadáním identifikátoru URI, na který chcete přejít. Identifikátory URI navigace můžou mít tři komponenty:
- Trasa, která definuje cestu k obsahu, který existuje jako součást hierarchie vizuálů prostředí.
- Stránka. Stránky, které v hierarchii vizuálů prostředí neexistují, je možné do navigačního zásobníku odeslat odkudkoli v aplikaci Shell. Například stránka podrobností nebude definována v hierarchii vizuálů prostředí, ale můžete ji podle potřeby odeslat do navigačního zásobníku.
- Jeden nebo více parametrů dotazu. Parametry dotazu jsou parametry, které lze předat na cílovou stránku při navigaci.
Pokud navigační identifikátor URI obsahuje všechny tři komponenty, struktura je: //route/page?queryParameters.
Registrace tras
Trasy lze definovat pro FlyoutItemobjekty , , TabBarTaba ShellContent to prostřednictvím jejich Route
vlastností:
<Shell ...>
<FlyoutItem ...
Route="animals">
<Tab ...
Route="domestic">
<ShellContent ...
Route="cats" />
<ShellContent ...
Route="dogs" />
</Tab>
<ShellContent ...
Route="monkeys" />
<ShellContent ...
Route="elephants" />
<ShellContent ...
Route="bears" />
</FlyoutItem>
<ShellContent ...
Route="about" />
...
</Shell>
Poznámka:
Všechny položky v hierarchii prostředí mají přidruženou trasu. Pokud trasu nenastavíte, vygeneruje se za běhu. U generovaných tras ale není zaručeno, že budou konzistentní napříč různými relacemi aplikací.
Výše uvedený příklad vytvoří následující hierarchii tras, kterou lze použít v programové navigaci:
animals
domestic
cats
dogs
monkeys
elephants
bears
about
Chcete-li přejít k objektu ShellContent pro trasu dogs
, absolutní identifikátor URI trasy je //animals/domestic/dogs
. Podobně pokud chcete přejít k objektu ShellContent pro trasu about
, absolutní identifikátor URI trasy je //about
.
Upozorňující
Pokud ArgumentException
se zjistí duplicitní trasa, vyvolá se při spuštění aplikace. Tato výjimka se vyvolá také v případě, že dvě nebo více tras na stejné úrovni v hierarchii sdílí název trasy.
Registrace tras stránky podrobností
V konstruktoru Shell podtřídy nebo v jakémkoli jiném umístění, které se spouští před vyvoláním trasy, je možné explicitně zaregistrovat další trasy pro všechny stránky podrobností, které nejsou reprezentovány v hierarchii vizuálů prostředí. To se provádí pomocí Routing.RegisterRoute
metody:
Routing.RegisterRoute("monkeydetails", typeof(MonkeyDetailPage));
Routing.RegisterRoute("beardetails", typeof(BearDetailPage));
Routing.RegisterRoute("catdetails", typeof(CatDetailPage));
Routing.RegisterRoute("dogdetails", typeof(DogDetailPage));
Routing.RegisterRoute("elephantdetails", typeof(ElephantDetailPage));
Tento příklad registruje stránky podrobností, které nejsou definovány v Shell podtřídě jako trasy. Tyto stránky podrobností se pak dají procházet pomocí navigace založené na identifikátoru URI, a to odkudkoli v aplikaci. Trasy pro tyto stránky se označují jako globální trasy.
Upozorňující
Vyvolá se chyba ArgumentException
, pokud Routing.RegisterRoute
se metoda pokusí zaregistrovat stejnou trasu na dva nebo více různých typů.
Případně je možné stránky v případě potřeby zaregistrovat na různých hierarchiích tras:
Routing.RegisterRoute("monkeys/details", typeof(MonkeyDetailPage));
Routing.RegisterRoute("bears/details", typeof(BearDetailPage));
Routing.RegisterRoute("cats/details", typeof(CatDetailPage));
Routing.RegisterRoute("dogs/details", typeof(DogDetailPage));
Routing.RegisterRoute("elephants/details", typeof(ElephantDetailPage));
Tento příklad umožňuje kontextovou navigaci na stránce, kde navigace na trasu details
ze stránky pro trasu monkeys
MonkeyDetailPage
zobrazí . Podobně se zobrazí přechod na trasu details
ze stránky trasy pro trasu elephants
ElephantDetailPage
. Další informace naleznete v tématu Kontextová navigace.
Poznámka:
Stránky, jejichž trasy byly zaregistrovány v Routing.RegisterRoute
metodě, lze v případě potřeby zrušit registraci s metodou Routing.UnRegisterRoute
.
Provádění navigace
Chcete-li provést navigaci, musí být nejprve získán odkaz na podtřídu Shell . Tento odkaz lze získat přetypováním App.Current.MainPage
vlastnosti na Shell objekt nebo prostřednictvím Shell.Current
vlastnosti. Navigaci pak lze provést voláním GoToAsync metody na objektu Shell . Tato metoda přejde na a ShellNavigationState
vrátí Task
, která se dokončí po dokončení animace navigace. Objekt ShellNavigationState
je vytvořen metodou GoToAsync , z string
, nebo Uri
, a má jeho Location
vlastnost nastavena string
na hodnotu nebo Uri
argument.
Důležité
Když se trasa z hierarchie vizuálů prostředí přepíná na, nevytvoří se zásobník navigace. Pokud se ale na stránku, která není v hierarchii vizuálů prostředí, přejde, vytvoří se navigační zásobník.
Aktuální stav navigace objektu Shell lze načíst prostřednictvím Shell.Current.CurrentState
vlastnosti, která zahrnuje identifikátor URI zobrazené trasy ve Location
vlastnosti.
Absolutní trasy
Navigaci lze provést zadáním platného absolutního identifikátoru URI jako argumentu metody GoToAsync :
await Shell.Current.GoToAsync("//animals/monkeys");
Tento příklad přejde na stránku trasy s trasou monkeys
definovanou v objektu ShellContent . Objekt ShellContent , který představuje trasu monkeys
, je podřízeným objektem FlyoutItem , jehož trasa je animals
.
Relativní trasy
Navigaci lze provést také zadáním platného relativního identifikátoru URI jako argumentu metody GoToAsync . Systém směrování se pokusí shodovat s identifikátorem URI objektu ShellContent . Proto pokud jsou všechny trasy v aplikaci jedinečné, lze navigaci provést pouze zadáním jedinečného názvu trasy jako relativního identifikátoru URI.
Podporují se následující relativní formáty tras:
Formát | Popis |
---|---|
cesta | Hierarchie tras bude prohledána zadanou trasou směrem nahoru od aktuální pozice. Odpovídající stránka se odešle do navigačního zásobníku. |
/cesta | Hierarchie tras bude prohledána ze zadané trasy směrem dolů od aktuální pozice. Odpovídající stránka se odešle do navigačního zásobníku. |
//cesta | Hierarchie tras bude prohledána zadanou trasou směrem nahoru od aktuální pozice. Odpovídající stránka nahradí zásobník navigace. |
///cesta | Hierarchie tras bude prohledána zadanou trasu směrem dolů od aktuální pozice. Odpovídající stránka nahradí zásobník navigace. |
Následující příklad přejde na stránku trasy monkeydetails
:
await Shell.Current.GoToAsync("monkeydetails");
V tomto příkladu monkeyDetails
se trasa vyhledá v hierarchii, dokud nenajde odpovídající stránku. Po nalezení stránky se nasdílí do navigačního zásobníku.
Kontextová navigace
Relativní trasy umožňují kontextovou navigaci. Představte si například následující hierarchii tras:
monkeys
details
bears
details
Když se zobrazí registrovaná stránka pro trasu monkeys
, zobrazí se při přechodu na details
trasu registrovaná stránka pro trasu monkeys/details
. Podobně když se zobrazí registrovaná stránka pro trasu bears
, zobrazí se při přechodu na details
trasu registrovaná stránka pro trasu bears/details
. Informace o tom, jak v tomto příkladu zaregistrovat trasy, najdete v tématu Registrace tras stránky.
Zpětná navigace
Zpětnou navigaci lze provést zadáním "." jako argumentu GoToAsync metody:
await Shell.Current.GoToAsync("..");
Zpětná navigace s "." lze také kombinovat s trasou:
await Shell.Current.GoToAsync("../route");
V tomto příkladu se provede zpětná navigace a pak přejde na zadanou trasu.
Důležité
Navigace zpět a do zadané trasy je možná pouze v případě, že zpětná navigace umístí vás na aktuální místo v hierarchii tras a přejde na zadanou trasu.
Podobně je možné několikrát přecházet zpět a pak přejít na zadanou trasu:
await Shell.Current.GoToAsync("../../route");
V tomto příkladu se zpětná navigace provádí dvakrát a pak navigace na zadanou trasu.
Kromě toho je možné data předávat prostřednictvím vlastností dotazu při procházení dozadu:
await Shell.Current.GoToAsync($"..?parameterToPassBack={parameterValueToPassBack}");
V tomto příkladu se provede zpětná navigace a hodnota parametru dotazu se předá parametru dotazu na předchozí stránce.
Poznámka:
Parametry dotazu je možné připojit k jakémukoli zpětnému navigačnímu požadavku.
Další informace o předávání dat při navigaci naleznete v tématu Předávání dat.
Neplatné trasy
Následující formáty tras jsou neplatné:
Formát | Vysvětlení |
---|---|
//nebo ///page | Globální trasy momentálně nemůžou být jedinou stránkou v navigačním zásobníku. Proto absolutní směrování na globální trasy není podporováno. |
Použití těchto formátů tras způsobí Exception
vyvolání.
Upozorňující
Při pokusu o přechod na neexistující trasu ArgumentException
dojde k vyvolání výjimky.
Ladění navigace
Některé třídy prostředí jsou zdobeny DebuggerDisplayAttribute
, který určuje, jak třída nebo pole je zobrazen ladicí program. To může pomoct ladit požadavky navigace zobrazením dat souvisejících s navigačním požadavkem. Například následující snímek obrazovky ukazuje CurrentItem
a CurrentState
vlastnosti objektu Shell.Current
:
V tomto příkladu vlastnost CurrentItem
typu FlyoutItem, zobrazí název a trasu objektu FlyoutItem . CurrentState
Podobně vlastnost typu ShellNavigationState
, zobrazí identifikátor URI zobrazené trasy v rámci aplikace Shell.
Navigační zásobník
Třída Tab definuje vlastnost typu IReadOnlyList<Page>
, která představuje aktuální navigační zásobník v rámci TabStack
. Třída také poskytuje následující přepisovatelné navigační metody:
GetNavigationStack
, vrátíIReadOnlyList<Page>
aktuální navigační zásobník.OnInsertPageBefore
volá se, kdyžINavigation.InsertPageBefore
je volána.OnPopAsync
, vrátíTask<Page>
a je volána přiINavigation.PopAsync
zavolání.OnPopToRootAsync
, vrátíTask
a je volána přiINavigation.OnPopToRootAsync
zavolání.OnPushAsync
, vrátíTask
a je volána přiINavigation.PushAsync
zavolání.OnRemovePage
volá se, kdyžINavigation.RemovePage
je volána.
Následující příklad ukazuje, jak přepsat metodu OnRemovePage
:
public class MyTab : Tab
{
protected override void OnRemovePage(Page page)
{
base.OnRemovePage(page);
// Custom logic
}
}
V tomto příkladu MyTab
by se objekty měly využívat v hierarchii vizuálů prostředí místo Tab objektů.
Události navigace
Třída Shell definuje Navigating
událost, která se aktivuje při spuštění navigace, a to buď kvůli programové navigaci nebo interakci uživatele. Objekt ShellNavigatingEventArgs
, který doprovází Navigating
událost, poskytuje následující vlastnosti:
Vlastnost | Type | Popis |
---|---|---|
Current |
ShellNavigationState |
Identifikátor URI aktuální stránky. |
Source |
ShellNavigationSource |
Typ navigace, ke kterému došlo. |
Target |
ShellNavigationState |
Identifikátor URI představující umístění navigace. |
CanCancel |
bool |
Hodnota označující, jestli je možné zrušit navigaci. |
Cancelled |
bool |
Hodnota označující, jestli byla navigace zrušena. |
Kromě toho třída poskytuje metoduCancel
, ShellNavigatingEventArgs
kterou lze použít ke zrušení navigace, a GetDeferral
metoda, která vrací ShellNavigatingDeferral
token, který lze použít k dokončení navigace. Další informace o odložení navigace najdete v tématu Odložení navigace.
Třída Shell také definuje Navigated
událost, která se aktivuje po dokončení navigace. Objekt ShellNavigatedEventArgs
, který doprovází Navigated
událost, poskytuje následující vlastnosti:
Vlastnost | Type | Popis |
---|---|---|
Current |
ShellNavigationState |
Identifikátor URI aktuální stránky. |
Previous |
ShellNavigationState |
Identifikátor URI předchozí stránky. |
Source |
ShellNavigationSource |
Typ navigace, ke kterému došlo. |
Důležité
Metoda OnNavigating
se volá, když se Navigating
událost aktivuje. OnNavigated
Podobně se volá metoda, když se Navigated
událost aktivuje. Obě metody je možné přepsat v Shell podtřídě za účelem zachycení požadavků na navigaci.
Obě ShellNavigatedEventArgs
třídy mají Source
vlastnosti typu ShellNavigationSource
.ShellNavigatingEventArgs
Tento výčet poskytuje následující hodnoty:
Unknown
Push
Pop
PopToRoot
Insert
Remove
ShellItemChanged
ShellSectionChanged
ShellContentChanged
Proto lze navigaci zachytit v OnNavigating
přepsání a akce lze provádět na základě zdroje navigace. Následující kód například ukazuje, jak zrušit zpětnou navigaci, pokud jsou data na stránce neuložené:
protected override void OnNavigating(ShellNavigatingEventArgs args)
{
base.OnNavigating(args);
// Cancel any back navigation.
if (args.Source == ShellNavigationSource.Pop)
{
args.Cancel();
}
}
Odložení navigace
Navigace v prostředí může být zachycena a dokončena nebo zrušena na základě volby uživatele. Toho lze dosáhnout přepsáním OnNavigating
metody v Shell podtřídě a voláním GetDeferral
metody na objektu ShellNavigatingEventArgs
. Tato metoda vrátí ShellNavigatingDeferral
token, který má metodu Complete
, kterou lze použít k dokončení požadavku navigace:
public MyShell : Shell
{
// ...
protected override async void OnNavigating(ShellNavigatingEventArgs args)
{
base.OnNavigating(args);
ShellNavigatingDeferral token = args.GetDeferral();
var result = await DisplayActionSheet("Navigate?", "Cancel", "Yes", "No");
if (result != "Yes")
{
args.Cancel();
}
token.Complete();
}
}
V tomto příkladu se zobrazí seznam akcí, který uživatele vyzve k dokončení žádosti o navigaci nebo ji zruší. Navigace je zrušena vyvoláním Cancel
metody v objektu ShellNavigatingEventArgs
. Navigace je dokončena vyvoláním Complete
metody na ShellNavigatingDeferral
tokenu, který byla načtena metodou GetDeferral
objektu ShellNavigatingEventArgs
.
Upozorňující
Metoda GoToAsync vyvolá InvalidOperationException
výjimku, pokud se uživatel pokusí přejít, pokud existuje čekající odložení navigace.
Předání dat
Primitivní data lze předat jako parametry dotazu založené na řetězci při provádění programové navigace založené na identifikátoru URI. Toho dosáhnete připojením ?
za trasou, za kterou následuje ID =
parametru dotazu a hodnotou:
async void OnCollectionViewSelectionChanged(object sender, SelectionChangedEventArgs e)
{
string elephantName = (e.CurrentSelection.FirstOrDefault() as Animal).Name;
await Shell.Current.GoToAsync($"elephantdetails?name={elephantName}");
}
Tento příklad načte aktuálně vybraný slon v objektu CollectionViewa přejde na trasu elephantdetails
, která se předává elephantName
jako parametr dotazu.
Předání více použití navigačních dat založených na objektech
Více použití objektových navigačních dat lze předat s GoToAsync přetížením, které určuje IDictionary<string, object>
argument:
async void OnCollectionViewSelectionChanged(object sender, SelectionChangedEventArgs e)
{
Animal animal = e.CurrentSelection.FirstOrDefault() as Animal;
var navigationParameter = new Dictionary<string, object>
{
{ "Bear", animal }
};
await Shell.Current.GoToAsync($"beardetails", navigationParameter);
}
Tento příklad načte aktuálně vybraného medvěda v objektu CollectionView, jako .Animal
Objekt Animal
se přidá do Dictionary
klíče Bear
. Pak se provede navigace na trasu beardetails
s předávanou Dictionary
jako navigační parametr.
Všechna data, která se předávají jako IDictionary<string, object>
argument, se uchovávají v paměti po celou dobu životnosti stránky a nevyvolají se, dokud se stránka neodebere ze zásobníku navigace. To může být problematické, jak je znázorněno v následujícím scénáři:
Page1
přejde pomocíPage2
GoToAsync metody a předává objekt s názvemMyData
.Page2
pak obdržíMyData
jako parametr dotazu.Page2
přejde kPage3
použití GoToAsync metody bez předání jakýchkoli dat.Page3
přechádí zpět metodou GoToAsync .Page2
pak se znovu přijmeMyData
jako parametr dotazu.
I když je to žádoucí v mnoha scénářích, pokud to není žádoucí, měli byste argument s metodou Clear
vymazatIDictionary<string, object>
, jakmile ji stránka poprvé přijala.
Předání navigačních dat založených na objektech s jedním použitím
Jedno použití objektových navigačních dat lze předat přetížením GoToAsync , které určuje ShellNavigationQueryParameters argument. Objekt ShellNavigationQueryParameters je určený pro jedno použití navigačních dat, která jsou po dokončení navigace vymazána. Následující příklad ukazuje navigaci při předávání dat s jedním použitím:
async void OnCollectionViewSelectionChanged(object sender, SelectionChangedEventArgs e)
{
Animal animal = e.CurrentSelection.FirstOrDefault() as Animal;
var navigationParameter = new ShellNavigationQueryParameters
{
{ "Bear", animal }
};
await Shell.Current.GoToAsync($"beardetails", navigationParameter);
}
Tento příklad načte aktuálně vybraného medvěda v objektu CollectionView, který Animal
je přidán do objektu ShellNavigationQueryParameters . Pak se provede navigace na trasu beardetails
ShellNavigationQueryParameters s objektem předaným jako navigační parametr. Po navigaci dojde k vymazání dat v objektu ShellNavigationQueryParameters .
Příjem navigačních dat
K příjmu navigačních dat existují dva přístupy:
- Třída, která představuje stránku, na kterou se přechává, nebo třídu stránky
BindingContext
, lze dekorovat pomocí parametru QueryPropertyAttribute každého dotazu. Další informace naleznete v tématu Zpracování navigačních dat pomocí atributů vlastností dotazu. - Třída, která představuje stránku, na kterou se prochází, nebo třída stránky
BindingContext
, může implementovat IQueryAttributable rozhraní. Další informace naleznete v tématu Zpracování navigačních dat pomocí jedné metody.
Zpracování navigačních dat pomocí atributů vlastností dotazu
Navigační data lze přijmout dekorací přijímající třídy s parametrem QueryPropertyAttribute dotazu založeným na řetězci, parametrem navigace na objektu nebo ShellNavigationQueryParameters objektem:
[QueryProperty(nameof(Bear), "Bear")]
public partial class BearDetailPage : ContentPage
{
Animal bear;
public Animal Bear
{
get => bear;
set
{
bear = value;
OnPropertyChanged();
}
}
public BearDetailPage()
{
InitializeComponent();
BindingContext = this;
}
}
V tomto příkladu první argument pro QueryPropertyAttribute určuje název vlastnosti, která obdrží data, s druhým argumentem určujícím ID parametru. Proto výše uvedený příklad určuje, QueryPropertyAttribute že Bear
vlastnost obdrží data předaná v Bear
navigačním parametru GoToAsync volání metody.
Důležité
Hodnoty parametrů dotazu založené na řetězci, které jsou přijaty prostřednictvím adresy QueryPropertyAttribute URL, jsou automaticky dekódovány.
Upozorňující
Příjem navigačních dat pomocí QueryPropertyAttribute příkazu není bezpečný a neměl by se používat s úplným oříznutím ani nativním objektem AOT. Místo toho byste měli implementovat IQueryAttributable rozhraní u typů, které potřebují přijímat parametry dotazu. Další informace najdete v tématu Zpracování navigačních dat pomocí jedné metody, oříznutí aplikace .NET MAUI a nativního nasazení AOT.
Zpracování navigačních dat pomocí jedné metody
Navigační data lze přijmout implementací IQueryAttributable rozhraní v přijímající třídě. Rozhraní IQueryAttributable určuje, že implementovat třídu musí implementovat metodu ApplyQueryAttributes
. Tato metoda má query
argument typu IDictionary<string, object>
, který obsahuje všechna data předaná během navigace. Každý klíč ve slovníku je ID parametru dotazu s jeho hodnotou odpovídající objektu, který představuje data. Výhodou tohoto přístupu je, že navigační data je možné zpracovat pomocí jedné metody, což může být užitečné, pokud máte více položek navigačních dat, které vyžadují zpracování jako celek.
Následující příklad ukazuje třídu modelu zobrazení, která implementuje IQueryAttributable rozhraní:
public class MonkeyDetailViewModel : IQueryAttributable, INotifyPropertyChanged
{
public Animal Monkey { get; private set; }
public void ApplyQueryAttributes(IDictionary<string, object> query)
{
Monkey = query["Monkey"] as Animal;
OnPropertyChanged("Monkey");
}
...
}
V tomto příkladu ApplyQueryAttributes
metoda načte objekt, který odpovídá Monkey
klíči ve query
slovníku, který byl předán jako argument volání GoToAsync metody.
Důležité
Hodnoty parametrů dotazu založené na řetězci přijaté přes IQueryAttributable rozhraní nejsou automaticky dekódovány adresou URL.
Předávání a zpracování více položek dat
Více řetězcových parametrů dotazu lze předat jejich propojením s &
. Například následující kód předá dvě datové položky:
async void OnCollectionViewSelectionChanged(object sender, SelectionChangedEventArgs e)
{
string elephantName = (e.CurrentSelection.FirstOrDefault() as Animal).Name;
string elephantLocation = (e.CurrentSelection.FirstOrDefault() as Animal).Location;
await Shell.Current.GoToAsync($"elephantdetails?name={elephantName}&location={elephantLocation}");
}
Tento příklad kódu načte aktuálně vybraný slon v objektu CollectionView, a přejde na trasu elephantdetails
, předává elephantName
a elephantLocation
jako parametry dotazu.
Chcete-li přijmout více položek dat, třída představující stránku, na kterou se přechází, nebo třídu stránky BindingContext
, může být zdobena parametrem QueryPropertyAttribute dotazu založeným na řetězci:
[QueryProperty(nameof(Name), "name")]
[QueryProperty(nameof(Location), "location")]
public partial class ElephantDetailPage : ContentPage
{
public string Name
{
set
{
// Custom logic
}
}
public string Location
{
set
{
// Custom logic
}
}
...
}
V tomto příkladu je třída vyzdobena parametrem QueryPropertyAttribute každého dotazu. První QueryPropertyAttribute určuje, že Name
vlastnost obdrží data předaná v parametru name
dotazu, zatímco druhá QueryPropertyAttribute určuje, že Location
vlastnost obdrží data předaná v parametru location
dotazu. V obou případech jsou hodnoty parametrů dotazu zadány v identifikátoru URI volání GoToAsync metody.
Upozorňující
Příjem navigačních dat pomocí QueryPropertyAttribute příkazu není bezpečný a neměl by se používat s úplným oříznutím ani nativním objektem AOT. Místo toho byste měli implementovat IQueryAttributable rozhraní u typů, které potřebují přijímat parametry dotazu. Další informace najdete v tématu Oříznutí aplikace .NET MAUI a nativního nasazení AOT.
Další možností je zpracování navigačních dat jedinou metodou implementací IQueryAttributable rozhraní třídy, která představuje stránku, na kterou se prochází, nebo třídy stránky BindingContext
:
public class ElephantDetailViewModel : IQueryAttributable, INotifyPropertyChanged
{
public Animal Elephant { get; private set; }
public void ApplyQueryAttributes(IDictionary<string, object> query)
{
string name = HttpUtility.UrlDecode(query["name"].ToString());
string location = HttpUtility.UrlDecode(query["location"].ToString());
...
}
...
}
V tomto příkladu ApplyQueryAttributes
metoda načte hodnotu name
parametrů dotazu location
z identifikátoru URI volání GoToAsync metody.
Poznámka:
Parametry dotazu založené na řetězci a parametry navigace založené na objektech je možné předávat současně při provádění navigace založené na trasách.
Chování tlačítka Zpět
Vzhled a chování tlačítka Zpět lze předefinovat nastavením BackButtonBehavior připojené vlastnosti na BackButtonBehavior objekt. Třída BackButtonBehavior definuje následující vlastnosti:
Command
, typu ICommand, který se spustí při stisknutí tlačítka Zpět.CommandParameter
, typuobject
, což je parametr, který je předán doCommand
.IconOverride
, typu ImageSource, ikona použitá pro tlačítko Zpět.IsEnabled
, typuboolean
označuje, zda je tlačítko zpět povoleno. Výchozí hodnota jetrue
.IsVisible
, typuboolean
označuje, zda je tlačítko zpět viditelné. Výchozí hodnota jetrue
.TextOverride
, typustring
, text použitý pro tlačítko Zpět.
Všechny tyto vlastnosti jsou podporovány BindableProperty objekty, což znamená, že vlastnosti mohou být cílem datových vazeb. Každý z nich BindableProperty má OneTime
režim vazby, což znamená, že data přejdou ze zdroje do cíle, ale pouze v případě, že se BindingContext
změny změní.
Všechny tyto vlastnosti jsou podporovány BindableProperty objekty, což znamená, že vlastnosti mohou být cílem datových vazeb. Režimy vazby Command
, , CommandParameter
IconOveride
a TextOveride
BindableProperty objektyOneTime
, což znamená, že data pocházejí ze zdroje do cíle, ale pouze v případěBindingContext
, že se změny. IsVisible
BindableProperty Objekty IsEnabled
mají OneWay
režimy vazeb, což znamená, že data pocházejí ze zdroje do cíle.
Následující kód ukazuje příklad opětovného definice vzhledu a chování tlačítka zpět:
<ContentPage ...>
<Shell.BackButtonBehavior>
<BackButtonBehavior Command="{Binding BackCommand}"
IconOverride="back.png" />
</Shell.BackButtonBehavior>
...
</ContentPage>
Vlastnost Command
je nastavena na ICommand spuštění při stisknutí tlačítka Zpět a IconOverride
vlastnost je nastavena na ikonu, která se používá pro tlačítko Zpět: