2010-10-22 61 views
2

我對Silverlight完全陌生,並試圖以「正確的方式」做事。將任意XML綁定到數據網格

問題是:我有一個XML需要從Web服務器獲取,我需要在數據網格中顯示該數據。

我已搜索周圍,我已經成功地得到如下:

說我的XML看起來像:

<customers> 
    <customer> 
     <name>A Person</name> 
     <address>my address</address> 
    </customer> 
    <customer> 
     <name>A Guy</name> 
     <address>my address 2</address> 
    </customer> 
</customers> 

我可以檢索這並填充POCO如:

public class Customer 
{ 
    public string Name { get; set; } 

    public string Address { get; set; } 
} 
... 
XDocument oDoc = //read from a string asnychronously 
var myData = from info in oDoc.Descendants("customer") 
    select new Customer 
    { 
     Name = Convert.ToString(info.Element("name").Value), 
     Address = Convert.ToString(info.Element("address").Value 
    }; 
_grid.ItemsSource = myData; 

但是,如果我採用這種方法,我不會真正使用Silverlight的動態綁定功能。

我該如何以「Silverlight」的方式做到這一點,以便當我(或其他真正知道Silverlight的人)在幾年後查看代碼時,不要絕對討厭我所做的事。

+0

我不確定你想象的是什麼「動態綁定」,但是Silverlight很大程度上依賴於綁定的類型。因此,爲了使Silverlight有效地綁定,您需要一個類型,例如'Customer'對象。 – AnthonyWJones 2010-10-22 19:55:47

回答

2

看看使用XMLSerializerDeserialize方法來自動反序列化您的XML而不必處理XDocument。您的類將是這樣的:

[XmlRoot] 
public class Customer 
{ 
    [XmlElement] 
    public string Name { get; set; } 

    [XmlElement] 
    public string Address { get; set; } 

} 

一旦你的數據解串,採取怎樣的數據正確地綁定到你的觀點看看MVVM

+0

+1:用於反序列化。 – AnthonyWJones 2010-10-22 20:00:32

+0

但是,爲Customer類執行上述操作並不會「自動」爲您提供IEnumerable 。 – iggymoran 2010-10-25 12:21:05

+0

是的,當然,您需要經過幾個步驟:創建序列化程序並傳遞數據源以反序列化。但是,這是一種更可維護的方式,因爲添加或刪除屬性或者甚至整個類都不需要更新反序列化代碼,只需要類和屬性即可。我會盡量在後面添加一些更詳細的答案,以使這個更清晰。 – Murven 2010-10-25 13:10:11