我有一个XmlDataProvider,一个ListBox和一个DataGrid。 底层的xml文件具有这种结构:
<Root>
<Person name="test">
<item name="bla" value="test"/>
<item name="bla" value="test2"/>
</Person>
<Root>
ListBox列出了所有人,而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>
答案 0 :(得分:1)
这是一个例子,应该是不言自明的,但如果事情不清楚,请随意问:
<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
上将IsSynchronizedWithCurrentItem
设置为ListBox
,然后通过当前项目绑定Source
(即{Binding /, Source={StaticResource data}}
)