Вам потребуется создать представление в логическом смысле, которое создаст вложение, необходимое для шаблонов иерархических данных.Если я вас правильно понимаю, у вас есть коллекция, которая представляет временную шкалу событий журнала, полученных вашим приложением.
Вы можете использовать несколько вложенных CollectionViewSource
с вложенным TreeView
, если вы не хотите изменятьбазовая коллекция ( адаптировано из этого поста ).Тем не менее, я не знаю, будет ли это соответствовать онлайн-обновлениям базовой коллекции, я решил, что это свойство Messages
в контексте данных:
<!-- First level grouping on the application name -->
<CollectionViewSource x:Key="ApplicationGroups"
Source="{Binding Messages}">
<CollectionViewSource.GroupDescriptions>
<PropertyGroupDescription PropertyName="Application" />
</CollectionViewSource.GroupDescriptions>
</CollectionViewSource>
Затем вы настраиваете шаблон для приложения иУровни серьезности:
<HierarchicalDataTemplate x:Key="ApplicationTemplate">
<!-- Nested tree view for the severity -->
<TreeView>
<TreeView.Resources>
<!-- Since this TreeView will receive a Group as its DataContext
we will bind to its Items property, containing the objects
which are a member of its group
-->
<CollectionViewSource x:Key="SeverityGroups"
Source="{Binding Items}">
<CollectionViewSource.GroupDescriptions>
<PropertyGroupDescription PropertyName="Severity" />
</CollectionViewSource.GroupDescriptions>
</CollectionViewSource>
<!-- Message Template -->
<DataTemplate x:Key="MessageTemplate">
<TextBlock Text="{Binding Message}" />
</DataTemplate>
<!-- Severity Hierarchy Template -->
<HierarchicalDataTemplate x:Key="SeverityTemplate"
ItemsSource="{Binding Items}"
ItemsTemplate="{StaticResource MessageTemplate}">
<TextBlock Text="{Binding Name}" />
</HierarchicalDataTemplate>
</TreeView.Resources>
<!-- Application sub-Tree View -->
<TreeViewItem Header="{Binding Name}"
ItemsSource="{Binding Groups, Source={StaticResource SeverityGroups}}"
ItemTemplate="{StaticResource SeverityTemplate}" />
</TreeView>
</HierarchicalDataTemplate>
Затем ваш 1011 * установит для ItemsSource
свойство Groups
представления коллекции, например:
<TreeView ItemsSource="{Binding Groups, Source={StaticResource ApplicationGroups}}"
ItemTemplate="{StaticResource ApplicationTemplate}" />
Обычно довольночем пройти через это, я создам слой перевода, который преобразуется в естественную иерархию ViewModel
, однако, если уровни серьезности могут измениться, это может быть лучшим вариантом.
Некоторые коммерческие решения для сетей данных предоставляют достойныегибкость для вложенной группировки, однако у меня недостаточно опыта, чтобы рекомендовать одну над другой.