Postituses Navigatsioon ja linkimine näitasin kuidas rakendustes XAML lehtede vahel navigeerida. Üheks miinuseks oli see, et vaikimisi nägime aadressiribal reaalset teed failini, mida me alati teha ei taha – esiteks võib siis ju ära arvata linke igasugustele teistele lehtedele ja teiseks ei ole nii eriti ilus ka. Nüüd vaatame, kuidas teha URI-d täpselt nii ilusaks nagu ise tahame. Nimetatakse seda URI mappinguks.
Minu arust on kõige mõistlikum URI mappingud panna App.xaml faili, sest see on ju ometi info, mis käib kogu rakenduse, mitte ainult ühe vaate kohta. Seega, eeldusel, et meil on App.xaml faili päises viide navigatsiooniraamistiku nimeruumile:
xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
Saame kirjutada midagi sellist:
<Application.Resources>
<navigation:UriMapper x:key="myUriMapper">
<navigation:UriMapping Uri="About" MappedUri="/Views/About.xaml" />
</navigation:UriMapper>
</Application.Resources>
See tähendab, et kui kirjutame aadressiks /MinuLaheRakendus/About näidatakse meie navigatsiooni raamis (Frame objekti sees) About.xaml sisu.
Mustrid
Veel toredamaks teevad asja wildcardid, ehk kirjutades reeglisse {page}
<Application.Resources>
<navigation:UriMapper x:key="myUriMapper">
<navigation:UriMapping Uri="About" MappedUri="/Views/About.xaml" />
<navigation:UriMapping Uri="{page}" MappedUri="/Views/{page}Page.xaml" />
</navigation:UriMapper>
</Application.Resources>
See tähendab, et kui nüüd kirjutada aadressiks /MinuLaheRakendus/MidaIganes saame sisuks /Views/MidaIganesPage.xaml, ehk me ei pea igakord reegleid juurdetekitama, kui mõni leht juurde sigineb. Reegleid kontrollitakse ülevalt alla ning kasutatakse esimest, mis leitakse, seega kuigi meil on reegel {} => {}page.xaml saame About puhul siiski About.xaml sisu.
Mitu mustrit korraga
Wildcarde võib loomulikult ka kombineerida:
<Application.Resources>
<navigation:UriMapper x:key="myUriMapper">
<navigation:UriMapping Uri="About"
MappedUri="/Views/About.xaml" />
<navigation:UriMapping Uri="{page}"
MappedUri="/Views/{page}Page.xaml" />
<navigation:UriMapping Uri="toode/{id}"
MappedUri="/Views/Toode.xaml?id={id}" />
<navigation:UriMapping Uri="{aasta}/{kuu}/{paev}"
MappedUri="/Views/Blog.xaml?y={aasta}&m={kuu}&d={paev}" />
</navigation:UriMapper>
</Application.Resources>
