2016-06-07 81 views
0

我第一次嘗試XElement綁定,所以如果這是非常愚蠢的道歉。我有一個XML,我需要綁定到DataGrid。綁定XElement到Datagrid

Music.xml:

<Music> 
    <Album Title="Chris Sells Live" Artist="Chris Sells" ReleaseDate="2/5/2008" /> 
    <Album Title="The Road to Redmond" Artist="Luka Abrus" ReleaseDate="4/3/2008"/> 
    <Album Title="The Best of Jim Hance" Artist="Jim Hance" ReleaseDate="6/2/2008"/> 
</Music> 

代碼隱藏:

InitializeComponent(); 
XElement MyMusic = XElement.Load("Music.xml"); 
this.XElementContainer.DataContext = MyMusic.Elements("Album"); 

以上代碼從Music.Xml該文件的XElement

XAML:<DataGrid x:Name="XElementContainer" ItemsSource="{Binding}"/>

輸出,我越來越[![它綁定了XElement的屬性。我需要它有標題,藝術家的子節點指定節點即專輯的子元素綁定和發佈日期]

enter image description here

我期待在DataGrid中的輸出,其中我不希望創建任何靜態DataGridTextColumn 。是否有可能只是綁定的XElement數據和得到的結果是這樣?:

Title     |Artist  |ReleaseDate 
    Chris Sells Live  Chris Sells 2/5/2008 
    The Road to Redmond Luka Abrus 4/3/2008 
    The Best of Jim Hance Jim Hance  6/2/2008 

回答

1

Datagrid的結合直接XML數據時,不能自動生成列,這就是爲什麼你通常要使用的(較小)的原因之一視圖模型。

實際上,它的工作原理是從你綁定到的對象的類的屬性自動生成列。這就是爲什麼你會在這些自動生成的列中看到XElement的屬性。

如果你要綁定到XML,你將不得不將列聲明:

<DataGrid.Columns> 
    <DataGridTextColumn Binding="{Binding Path=Attribute[Title].Value}" Header="Title" /> 
    <DataGridTextColumn Binding="{Binding Path=Attribute[Artist].Value}" Header="Artist"/> 
    <DataGridTextColumn Binding="{Binding Path=Attribute[ReleaseDate].Value}" Header="ReleaseDate"/> 
</DataGrid.Columns> 
+0

謝謝Natxo。但爲什麼它將XElement屬性綁定到網格? –

+0

@ ParthasarthiB.K我做了一個編輯,以澄清它 – Natxo

+0

工程罰款納克索。但是,對於我的問題還有其他解決方案嗎?我不想有靜態的DataGridTextColumn。難道我只是像我們使用List DataGrid綁定一樣將XElement綁定到DataGrid?任何幫助將非常感激。 –