У меня есть XmlDataProvider, ListBox и DataGrid.
Основной XML-файл имеет такую структуру:
<Root>
<Person name="test">
<item name="bla" value="test"/>
<item name="bla" value="test2"/>
</Person>
<Root>
В ListBox перечислены все лица, в то время как в DataGrid перечислены все элементы, соответствующие выбранному человеку. Это работает как задумано.
Теперь я хочу сгруппировать данные в DataGrid, но, посмотрев на примеры, я до сих пор не понимаю, как это сделать с помощью XmlDataProvider (как / где создать ListCollectionView из XmlDataProvider).
Может ли кто-нибудь дать мне быстрый пример xaml для этого, например, сгруппировать элементы по имени? :)
Спасибо за любую помощь заранее:)
привет
UPDATE:
Теперь группировка работает, но когда я что-то добавляю в xml, она больше не отображается мгновенно (в списке или в сетке данных). Что не так? Я действительно новичок в 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>