Wpf 使用XmlDataProvider源对DataGrid进行分组
我有一个XmlDataProvider、一个ListBox和一个DataGrid。 基础xml文件具有这种结构:Wpf 使用XmlDataProvider源对DataGrid进行分组,wpf,xaml,datagrid,xmldataprovider,Wpf,Xaml,Datagrid,Xmldataprovider,我有一个XmlDataProvider、一个ListBox和一个DataGrid。 基础xml文件具有这种结构: <Root> <Person name="test"> <item name="bla" value="test"/> <item name="bla" value="test2"/> </Person> <Root> 列表框列出所有人员,而DataGrid列出与所选人员对应的所
<Root>
<Person name="test">
<item name="bla" value="test"/>
<item name="bla" value="test2"/>
</Person>
<Root>
列表框列出所有人员,而DataGrid列出与所选人员对应的所有项目。这正是我们想要的。
现在,我想在DataGrid中对数据进行分组,但是看了一些示例之后,我仍然不知道如何使用XmlDataProvider(如何/在何处创建一个基于XmlDataProvider的ListCollectionView)。
有人可以给我一个快速的xaml示例,例如按名称分组项目吗?:)
感谢您提前提供的帮助:)
问候
更新:
现在分组工作了,但是当我向xml中添加一些内容时,它不再立即显示(在listbox或datagrid中)?我对wpf真的很陌生,所以可能有多余或不必要的东西,你指出它们我没有问题:)
以下是使用的相关代码:
<Grid.DataContext>
<XmlDataProvider x:Name="XmlData" Source="entries.xml" XPath="Root/Person" />
</Grid.DataContext>
<ListBox Name="PersonListBox"
ItemsSource="{Binding}"
ItemTemplate="{StaticResource listBoxTemplate}"
IsSynchronizedWithCurrentItem="True"
Visibility="Visible" SelectionMode="Single" SelectedIndex="-1" DataContext="{Binding}">
</ListBox>
<DataGrid IsSynchronizedWithCurrentItem="True" Name="itemGrid"
DataContext="{Binding ElementName=PersonListBox, Path=SelectedItem}"
CanUserAddRows="true"
IsReadOnly="true"
AutoGenerateColumns="False">
<DataGrid.Resources>
<CollectionViewSource x:Key="items" Source="{Binding XPath=item}">
<CollectionViewSource.GroupDescriptions>
<PropertyGroupDescription PropertyName="@name"/>
</CollectionViewSource.GroupDescriptions>
</CollectionViewSource>
</DataGrid.Resources>
<DataGrid.ItemsSource>
<Binding Source="{StaticResource items}"/>
</DataGrid.ItemsSource>
<DataGrid.Columns>
<DataGridTextColumn Width="*" Header="Name" Binding="{Binding XPath=@name}"/>
<DataGridTextColumn Header="Wert" Binding="{Binding XPath=@value}"/>
</DataGrid.Columns>
<DataGrid.GroupStyle>
<GroupStyle />
</DataGrid.GroupStyle>
</DataGrid>
这里有一个例子,应该是不言自明的,但如果有什么不清楚的地方,请随时询问:
<DataGrid>
<DataGrid.Resources>
<CollectionViewSource x:Key="items" Source="{Binding SelectedItem, ElementName=lb}">
<CollectionViewSource.GroupDescriptions>
<PropertyGroupDescription PropertyName="@name"/>
</CollectionViewSource.GroupDescriptions>
</CollectionViewSource>
</DataGrid.Resources>
<DataGrid.ItemsSource>
<Binding Source="{StaticResource items}"/>
</DataGrid.ItemsSource>
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding XPath=@value}"/>
</DataGrid.Columns>
<DataGrid.GroupStyle>
<GroupStyle />
</DataGrid.GroupStyle>
</DataGrid>
(您也可以在
列表框中设置true
,然后通过当前项绑定源代码(即{Binding/,Source={StaticResource data}}
)非常感谢,效果非常好:)我真的开始喜欢wpf^^^好的,太快了,现在xml中的变化不会立即显示出来,但只有当我重新加载时,更新了问题:)好的,不用担心。我将CollectionViewSource的源代码更改为{Binding XPath=item},现在它可以工作了:)谢谢again@ch40s当前位置听到这个消息很高兴,如果现在你的问题得到了充分的回答,你可以回答我的问题。