我一直在尋找和嘗試各種解決方案,但迄今爲止沒有人解決我的問題。我在Visual Studio 2010/.NET4中使用WPF中的內置DataGrid來顯示作爲XDocument存儲的XML文檔中的數據。如何正確地將xml綁定到WPF DataGrid?
我的代碼都運行良好,我已驗證XDocument存在並且正確。但是,DataGrid不顯示任何數據。
的XML看起來像這樣(簡化爲清楚起見):
<data>
<track>
<id>211</id>
<name>Track Name</name>
<duration>156</duration>
<artist_id>13</artist_id>
<artist_name>Artist Name</artist_name>
<album_id>29</album_id>
<album_name>Album Name</album_name>
</track>
...
</data>
我的XAML看起來像這樣:
<DataGrid x:Name="LibraryView" Grid.Row="1"
DataContext="{Binding Path=TrackList}" ItemsSource="{Binding XPath=/data/track}">
<DataGridTextColumn Header="Title" Binding="{Binding XPath=name}"/>
<DataGridTextColumn Header="Artist" Binding="{Binding XPath=artist_name}"/>
<DataGridTextColumn Header="Album" Binding="{Binding XPath=album_name}"/>
<DataGridTextColumn Header="Length" Binding="{Binding XPath=duration}"/>
</DataGrid>
備份它只是在C#分配一個新的XDocument(從下載Web服務)到TrackList屬性(實現INotifyPropertyChanged)。沒有進一步的處理。
我以前曾嘗試使用XLinq來綁定到查詢結果,但兩者都無效(同樣的問題),所以我想我會嘗試XPath方法來避免編寫潛在的錯誤Linq語句,並嘗試找到問題。
我正在耗盡如何使DataGrid正確顯示的想法。我對這項工作應該如何工作的理解顯然是缺乏的,所以我非常感謝提供的任何幫助。
編輯:值得一提的是,我對輸入數據格式有一定的靈活性,因爲我自己下載了原始XML。我會嘗試一些建議,看看我能做些什麼。
這引發了一個InvalidOperationException異常,消息「Items集合在使用ItemsSource之前必須是空的,這發生在對DataContext或PropertyChanged的事件處理程序執行賦值時發生,因此無法執行任何操作。 編輯:No it doesn' t,我忘了在我的列定義周圍添加 –
IanGilham
2010-02-11 11:51:35
異常是我的錯誤,這工作正常 – IanGilham 2010-02-11 12:10:58
呵呵,調試xaml可能會令人厭惡。 – Natxo 2010-02-12 09:01:23