2016-06-07 80 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?任何帮助将非常感激。 –