Antonio "tdj"

(C'è sempre un modo migliore)
posts - 312, comments - 268, trackbacks - 17

My Links

News





Tag Cloud

Article Categories

Archives

Post Categories

Image Galleries

Articoli

Blogs

Controlli WinForm free

Guide

Siti vari

Sviluppo

Silverlight 3 - UriMapper e Navigation

Nell'articolo "Silverlight 3 – Navigation Framework" ho introdotto brevemente i controlli Frame e Page per realizzare applicazioni multi pagina con Silverlight 3. In particolare è stata utilizzata la proprietà Tag del Button per memorizzare l'url della pagina da caricare:

<Button Tag="/Pages/Home.xaml" Click="NavigationButton_Click" Content="Home" />

Tuttavia, avere l'url direttamente nel controllo non è mai una cosa buona soprattutto se deve essere usata in punti differenti dell'applicazione (situazione non così rara). Una soluzione è l'utilizzo dell'oggetto UriMapper che permette di creare un mapping Nome-Url così da usare un nome al posto della Url nel codice.

Come definire un UriMapper
Riprendendo l'esempio a  corredo dell'articolo definiamo nelle risorse dell'applicazione un UriMapper:

   1:  <Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   2:               xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
   3:               x:Class="SampleNavigation.App"
   4:               xmlns:navcore="clr-namespace:System.Windows.Navigation; 
assembly=System.Windows.Controls.Navigation"
   5:               >
   6:      <Application.Resources>
   7:          <navcore:UriMapper x:Key="uriMapper">
   8:              <navcore:UriMapping Uri="Home" MappedUri="/Pages/Home.xaml"/>
   9:              <navcore:UriMapping Uri="FirstPage" MappedUri="/Pages/Page1.xaml"/>
  10:              <navcore:UriMapping Uri="SecondPage" MappedUri="/Pages/Page2.xaml"/>
  11:          </navcore:UriMapper>
  12:      </Application.Resources>
  13:  </Application>

Tutto semplice. la proprietà Uri è il nome della Url e MappedUri la Url vera e propria a cui puntare.

Nota: per qualche strano motivo a me sconosciuto, se specificate una Key diversa da “uriMapper” non funziona.

A questo punto si può modificare la definizione del button in questo modo:

<Button Tag="Home" Click="NavigationButton_Click" Content="Home"/>

mentre il caricamento di una pagina non subisce modifiche:
 

   1:  Dim TargetUrl As String = DirectCast(sender, Button).Tag.ToString
   2:  NavFrame.Navigate(New Uri(TargetUrl, UriKind.Relative))


L’oggetto UriMapper è utile anche in presenza di url con QueryString. Nell’esempio che stiamo considerando c’è la possibilità di passare un parametro “id” alla Page2 quindi definiamo un UriMapping anche per questo tipo di chiamata:

   1:   <navcore:UriMapper x:Key="uriMapper">
   2:      ...
   3:      <navcore:UriMapping Uri="FirstPage/{id}" MappedUri="/Pages/Page1.xaml?id={id}"/>
   4:  </navcore:UriMapper>


Sostanzialmente viene utilizzato il placeholder {id} per indicare la parte dinamica della url rappresentata, appunto, dal parametro id. Il caricamento della pagina da codice è il seguente:

   1:  Me.NavigationService.Navigate(New Uri(“/FirstPage/5”, UriKind.Relative))

 
Questa tecnica diventa fondamentale in ambito SEO :)


Potete scaricare l'esempio aggiornato da qui.

Print | posted on martedì 14 aprile 2009 21:01 | Filed Under [ Silverlight ]

Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET