我第一次尝试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的属性。我需要绑定指定节点的子元素,即具有标题,艺术家和发行日期的子节点的专辑]
我期待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
答案 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>