【问题标题】:Binding XElement to Datagrid将 XElement 绑定到 Datagrid
【发布时间】:2016-10-07 00:26:17
【问题描述】:

我是第一次尝试 XElement 绑定,如果这很愚蠢,请道歉。我有一个需要绑定到 DataGrid 的 XML。

音乐.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:&lt;DataGrid x:Name="XElementContainer" ItemsSource="{Binding}"/&gt;

我得到的输出 [![它绑定了 XElement 的属性。我需要绑定指定节点的子元素,即具有 Title、Artist 和 Release Date 子节点的专辑]

我希望在我不想创建任何静态 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

【问题讨论】:

    标签: wpf c#-4.0 datagrid xelement


    【解决方案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>
    

    【讨论】:

    • 谢谢 Natxo。但为什么要将 XElement 属性绑定到网格?
    • 工作正常 Natxo。但是我的问题有什么替代解决方案吗?我不想拥有静态 DataGridTextColumn。我不能像使用 List DataGrid 绑定一样将 XElement 绑定到 DataGrid 吗?任何帮助将不胜感激。
    • @ParthasarthiB.K 我认为你做不到。您可以在代码隐藏中生成列,这在某些情况下允许更多控制(例如当您不知道需要多少列时)
    • 感谢您对 Natxo 的所有帮助 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-07
    • 2015-09-02
    • 1970-01-01
    • 2013-07-28
    • 2014-10-10
    • 2013-08-06
    相关资源
    最近更新 更多