【发布时间】:2014-10-23 21:04:55
【问题描述】:
我在 WPF 中有一个 DataGrid,我想用 XML 文件的结果填充它,但我不确定如何去做。
我已经设法用各种元素属性填充列,但我希望每个属性都有单独的列,这些列分配给我的 XML 文件中的元素。
我的 XML 格式如下:
<?xml version="1.0"?>
-<Roles User="Mr 1">
<Role Info="Information 1" Name="Role1"> </Role>
<Role Info="Information 2" Name="Role2"> </Role>
</Roles>
等等...对于不同的用户,每个用户都分配了角色。
我的VB.Net代码如下:
Private Sub DataGridTest_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
Dim xDoc = XDocument.Load("\Roles.xml")
Dim xRoles = xDoc...<Role>
MyDataGrid.DataContext = xRoles
End Sub
我的 XAML 如下:
<Grid Style="{StaticResource ContentRoot}">
<DataGrid Name="MyDataGrid" ItemsSource="{Binding}" AutoGenerateColumns="False" HorizontalAlignment="Stretch" Height="500" >
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding XPath=@Name}" Header="Role" />
<DataGridTextColumn Binding="{Binding XPath=@Info }" Header="Information" />
</DataGrid.Columns>
</DataGrid>
</Grid>
虽然这确实填充了 DataGrid,但它似乎填充了与 xRole 关联的所有属性。我可以理解这种情况正在发生,但我无法弄清楚如何获得我正在寻找的结果,即:“信息”和“名称”作为标题,属性值作为它们自己列中的单元格。
我确实尝试使用属性值填充列表,手动创建列,然后将列表绑定到列 - 这可能是正确的方法吗? - 但我只能弄清楚如何将 1 个列表绑定到其中一列。是否可以有 2 个单独的列表并将它们单独绑定到它们自己的列?
我意识到我可能会在这里问两个不同的问题 - 抱歉。我发现特定问题的信息很少——尤其是与 VB.Net 相关的信息
提前致谢!
【问题讨论】:
-
来自MSDN:当源是 XML 数据时,DataGrid 无法自动生成列。在这种情况下,创建一个自定义 Columns 集合
-
谢谢。你能解释一下如何将单个属性绑定到不同的列吗?我在将属性输入列表并将该列表绑定到 1 列方面取得了一些成功,但我还没有弄清楚如何处理多个列。谢谢
-
您是否尝试使用 XPath 绑定
DataGrid列,例如{Binding XPath=@Info}? -
感谢您的回复。我已经编辑了我的 XAML。这是你的意思吗?
标签: xml wpf vb.net datagrid linq-to-xml