将XElement绑定到Datagrid

时间:2016-06-07 07:57:14

标签: wpf c#-4.0 datagrid xelement

我第一次尝试XElement绑定,如果这非常愚蠢,请道歉。我有一个XML,我需要绑定到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>

CodeBehind:

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 个答案:

答案 0 :(得分:1)

当直接绑定到XML数据时,Datagrid无法自动生成列,这是您通常想要使用视图模型的(较少)原因之一。

实际上,它可以从绑定它的对象的类的属性中自动生成列。这就是您在这些自动生成的列中看到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>