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
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.