【发布时间】:2014-10-21 19:09:57
【问题描述】:
我在将 XML 数据设置为我的 DataGrid 组合框的 ItemsSource 时遇到问题。
下面是我的 XML 代码:
<?xml version="1.0" standalone="yes"?>
<Table>
<FRUIT>
<edible>True</edible>
<Types main="Apple">
<Type>Fuji</Type>
<Type>Gala</Type>
</Types>
</FRUIT>
<FRUIT>
<edible>True</edible>
<Types main="Banana">
<Type>Burro</Type>
<Type>Red</Type>
</Types>
</FRUIT>
</Table>
接下来是 WPFtoolkit DataGrid Combobox 的 XAML 代码:
<Custom:DataGridTemplateColumn Header="Fruits" Width="300">
<Custom:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox Name="cboFruit"/>
</DataTemplate>
</Custom:DataGridTemplateColumn.CellTemplate>
</Custom:DataGridTemplateColumn>
在将数据加载到 ComboBox 之前,我只需将 XML 数据放入 DataSet 并将 DataGrid 的 DataContext 设置为 DataSet 中的第一个表。
现在这行不通,因为我正在尝试将每种类型的水果放入 ComboBox。
我可以更改 XML 中的任何内容以使其正常工作。如果您需要更多信息,请告诉我。
提前致谢!
下面发布的是我的 CustomDataGrid (WPFtoolkit) 的完整 XAML:
<Window.DataContext>
<XmlDataProvider x:Name="FruitData" XPath="fruits/fruit" />
</Window.DataContext>
<Grid>
<Custom:CustomDataGrid x:Name="dgFruits" AutoGenerateColumns="False" Margin="5" CanUserAddRows="True"
ItemsSource="{Binding XPath=fruits/fruit}"><!--Here is confusion-->
<Custom:DataGrid.Columns>
<!--Edible-->
<Custom:DataGridTextColumn Header="Edible" Binding="{Binding XPath=edible}"/>
<!--Fruit-->
<Custom:DataGridTemplateColumn Header="Fruit Types" Width="300">
<Custom:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding XPath=types/type}"/><!--This works fine on a combobox outside of the DataGrid-->
</DataTemplate>
</Custom:DataGridTemplateColumn.CellTemplate>
</Custom:DataGridTemplateColumn>
</Custom:CustomDataGrid>
</Grid>
【问题讨论】:
-
您的 XML 文件无效。 XML 文档只能有 1 个根。此外,我们不需要任何 DataSet 来加载 XML。你可以使用诸如
XmlDataProvider,甚至是Linq-to-XML。 -
啊,我的错。我确实有 1 个根来封装 FRUIT(名为
),但我忘了包括在内。 XMLDataProvider 是否允许动态源?
我不太确定,但Source属性是可变的。您可以尝试在后面的代码中更改该属性。注意数据的结构要一致,保证切换Source后不会破坏当前的Binding。当然,感谢您的反馈!