Hey guys...
smanettando un pochettino con la mia applicazione sviluppata in Silverlight 3.0 mi sono trovato di fronte ad un piccolissimo problemino, dovevo recuperare i dati da un file xml contenente informazioni di log tramite una query Linq, associando ciò che mi veniva restiruito alla proprietà ItemSource di un DataGrid.
Di seguito vi riporto la struttura del file Log.xml
<log>
<messaggio>
<data>07/01/2010 11.41.49</data>
<tipo>avviso</tipo>
<ip>127.0.0.1</ip>
<descrizione>Accesso a Portale.aspx</descrizione>
</messaggio>
<messaggio>
.....
</messaggio>
......
</log>
Partendo da tale log, volendo caricare i messaggi in una DataGrid nominata "XmlDataGrid", sono andato a definire le colonne che la compongono e successivamenti il binding ai dati.
La DataGrid si presenterà cosi :

(x visualizzare la definizione delle proprietà della DataGrid cliccare sull'immagine)
Come si può ben notare dalla definizione del binding nelle DataGridTextColum i valori del binding non corrispondono pienamente a quelli dei nomi dei tag all'interno del file Xml di log.
es.
tipo (file di log) ---> tipoMessaggio (DataGrid)
La motivazione di tale differenza di nomi è dovuta al fatto che le righe restituitemi dalla query linq vengono inserite in una sorta di lista di ElementiLog definiti in una classe a parte. Di seguito riporto i passi per fare tutto ciò che ho detto:
Ho creato un file di classe ElementiLog che contiene al suo interno la definizione di tali proprietà:
public class ElementiLog
{
public string data{get;set;}
public string ip { get; set; }
public string tipoMessaggio { get; set; }
public string messaggio { get; set; }
}
Ecco a cosa erano bindate le colonne della DataGrid.
A questo punto non resta altro che scrivere la query linq che mi recuperi i dati e associare il risultato della mia query al DataGrid --->
// Istanzio un oggetto di tipo XDocument appartenente al namespace ...Xml.Linq e faccio in modo che gli venga caricato al suo
//interno il file di log .XML
XDocument XmlDocument = XDocument.Load("MioFileLog.xml");
// Ecco la query Linq, non fa altro che recuperare tutti gli elementi discendenti del nodo messaggio e inserirli ad uno ad uno in
// oggetti di tipo ElementiLog associando alle property della classe i valori dei nodi di ogni messaggio.
var queryLog = from righeLog in XmlDocument.Descendants("messaggio")
select new LogXmlLettura.ElementiLog
{
data= Convert.ToString(righeLog.Element("data").Value),
ip= Convert.ToString(righeLog.Element("ip").Value),
tipoMessaggio = Convert.ToString(righeLog.Element("tipo").Value),
messaggio = Convert.ToString(righeLog.Element("descrizione").Value),
};
// Qui inserisco i dati nella DataGrid
XmlDataGrid.ItemsSource = queryLog;
Il risultato ottenuto sarà quello seguente ---->

Se avete bisogno di chiarimenti e/o delucidazioni o se avete dei metodi più rapidi, magari migliori di questo usato da me sono a vostra completa disposizione.