Utilizzare dati in formato XML in XAML

di Cristian Civera, in Windows Presentation Foundation, XAML,

Quando si sviluppano applicazioni per Windows Presentation Foundation, si fa largo uso di XAML e si cerca di scrivere il meno codice possibile. Frequente è l'uso di dati esterni provenienti da database oppure da file e spesso questi sono in formato XML. In WPF è presente un oggetto, di nome XmlDataProvider, che permette di caricare dati XML in modo semplice e di facile utilizzo tramite binding all'interno dell'applicazione.

La proprietà principale è Source e permette di impostare sia un percorso ad un file assoluto, sia ad un indirizzo web. Normalmente il caricamento della risorsa esterna avviene in modo asincrono, poiché IsAsynchronous è true, e ciò permette di non influire in modo bloccante sull'interfaccia offerta all'utente. Il modo più semplice per usare un provider consiste nell'inserire l'oggetto nelle risorse per essere riutilizzato uno o più volte. L'esempio seguente carica un feed RSS e lo mostra tramite una ListBox:

<StackPanel xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

  <StackPanel.Resources>
    <XmlDataProvider x:Key="data" Source="http://feed.winfxitalia.com/feed.xml" XPath="//item">
    </XmlDataProvider>

  </StackPanel.Resources>

  <ListBox ItemsSource="{Binding Source={StaticResource data}}">
    <ItemsControl.ItemTemplate>
      <DataTemplate>
        <TextBlock>
          <TextBlock Text="{Binding XPath=title}" />
          <LineBreak />
          <TextBlock Text="{Binding XPath=pubDate}" />
        </TextBlock>
      </DataTemplate>
    </ItemsControl.ItemTemplate>

  </ListBox>

</StackPanel>

Tramite la proprietà XPath si può facoltativamente indicare quale percorso XPath caricare come collezione, e viene sfruttata nell'esempio precedente, per caricare tramite binding la lista dei tag item. All'interno poi di ogni item si ha a disposizione il nodo corrente e quindi i nodi figli title e pubDate.

In alternativa a Source, è possibile inserire direttamente l'XML valorizzando la proprietà XmlSerializer. Per farlo, tramite un oggetto speciale di markup XData è possibile inserire i tag XML:

<StackPanel.Resources>

  <XmlDataProvider x:Key="data" XPath="//item">
    <x:XData>
      <items xmlns="">
        <item>
          <title>#874 - Leggere il valore di un campo TimeSpan con il DataReader</title>
          <pubDate>Thu, 22 Mar 2007 08:00:00</pubDate>
        </item>
        <item>
          <title>#873 - Deserializzare una stringa in formato XML in un oggetto</title>
          <pubDate>Thu, 21 Mar 2007 08:00:00</pubDate>
        </item>
      </items>
    </x:XData>
  </XmlDataProvider>
</StackPanel.Resources>

Per ultimo, a runtime, si può valorizzare la proprietà Document di tipo XmlDocument del namespace System.Xml con i canoni normali di trattamento dei file XML.

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi