gpt4 book ai didi

wpf - 如何将 xml 正确绑定(bind)到 WPF DataGrid?

转载 作者:行者123 更新时间:2023-12-04 11:17:20 25 4
gpt4 key购买 nike

我已经寻找并尝试了各种解决方案,但到目前为止,它们都没有解决我的问题。我在 Visual Studio 2010/.NET4 中使用 WPF 中的内置 DataGrid 来显示存储为 XDocument 的 XML 文档中的数据。

我的代码运行良好,并且我已验证 XDocument 存在且正确。但是,DataGrid 不显示任何数据。

XML 看起来像这样(为清楚起见进行了简化):

<data>
<track>
<id>211</id>
<name>Track Name</name>
<duration>156</duration>
<artist_id>13</artist_id>
<artist_name>Artist Name</artist_name>
<album_id>29</album_id>
<album_name>Album Name</album_name>
</track>
...
</data>

我的 XAML 看起来像这样:
<DataGrid x:Name="LibraryView" Grid.Row="1"
DataContext="{Binding Path=TrackList}" ItemsSource="{Binding XPath=/data/track}">
<DataGridTextColumn Header="Title" Binding="{Binding XPath=name}"/>
<DataGridTextColumn Header="Artist" Binding="{Binding XPath=artist_name}"/>
<DataGridTextColumn Header="Album" Binding="{Binding XPath=album_name}"/>
<DataGridTextColumn Header="Length" Binding="{Binding XPath=duration}"/>
</DataGrid>

支持它的 C# 只是将一个新的 XDocument(从 Web 服务下载)分配给 TrackList 属性(它实现了 INotifyPropertyChanged)。没有对其进行进一步处理。

我之前曾尝试使用 Xlinq 绑定(bind)到查询结果,但这也不起作用(同样的问题),所以我想我会尝试 XPath 方法以避免编写可能有错误的 Linq 语句,并尝试找到问题.

对于如何让 DataGrid 正确显示,我已经没有什么想法了。我显然缺乏对它应该如何工作的理解,因此我将非常感谢提供的任何帮助。

编辑:值得注意的是,我在输入数据格式方面具有一定的灵 active ,因为我自己正在下载原始 XML。我会尝试一些建议,看看我能做什么。

最佳答案

我使用 Xlinq 并且工作正常,使用 XElement 而不是 XDocument :

XElement TrackList = XElement.Load("List.xml");
LibraryView.DataContext = TrackList;

xml:
<DataGrid x:Name="LibraryView" ItemsSource="{Binding Path=Elements[track]}">
<DataGrid.Columns>
<DataGridTextColumn Header="Artist" Binding="{Binding Path=Element[artist_name].Value}"/>
<DataGridTextColumn Header="Album" Binding="{Binding Path=Element[album_name].Value}"/>
<DataGridTextColumn Header="Length" Binding="{Binding Path=Element[duration].Value}"/>
</DataGrid.Columns>
</DataGrid>

关于wpf - 如何将 xml 正确绑定(bind)到 WPF DataGrid?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2199721/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com