将 XElement 绑定到数据网格
Binding XElement to Datagrid
我是第一次尝试 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>
代码隐藏:
InitializeComponent();
XElement MyMusic = XElement.Load("Music.xml");
this.XElementContainer.DataContext = MyMusic.Elements("Album");
以上代码从 Music.Xml 文件
获取 XElement
XAML : <DataGrid x:Name="XElementContainer" ItemsSource="{Binding}"/>
我得到的输出 [![它正在绑定 XElement 的属性。我需要绑定指定节点的子元素,即具有 Title、Artist 和 Release Date 子节点的 Album]
我期待数据网格中的输出,我不想在其中创建任何静态 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
当直接绑定到 XML 数据时,Datagrid 无法自动生成列,这是您通常想要使用视图模型的(次要)原因之一。
实际上,它可以根据您绑定到的对象的 class 的属性自动生成列。这就是为什么您会在那些自动生成的列中看到 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>
我是第一次尝试 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>
代码隐藏:
InitializeComponent();
XElement MyMusic = XElement.Load("Music.xml");
this.XElementContainer.DataContext = MyMusic.Elements("Album");
以上代码从 Music.Xml 文件
获取 XElementXAML : <DataGrid x:Name="XElementContainer" ItemsSource="{Binding}"/>
我得到的输出 [![它正在绑定 XElement 的属性。我需要绑定指定节点的子元素,即具有 Title、Artist 和 Release Date 子节点的 Album]
我期待数据网格中的输出,我不想在其中创建任何静态 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
当直接绑定到 XML 数据时,Datagrid 无法自动生成列,这是您通常想要使用视图模型的(次要)原因之一。
实际上,它可以根据您绑定到的对象的 class 的属性自动生成列。这就是为什么您会在那些自动生成的列中看到 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>