Я хотел бы взять плоский список объектов и представить их в TreeView, используя пользовательские группы.
public enum DocumentType { Current, Inactive, Transition, Checkpack, TechLog, Delivery }
public enum Status { Approved, Rejected, Pending }
public class Document
{
public string Name { get; set; }
public DateTime Created { get; set; }
public string CreatedBy { get; set; }
public DateTime Modified { get; set; }
public string ModifiedBy { get; set; }
public DocumentType Type { get; set; }
public Status Status { get; set; }
}
Например ... Пользователь может захотеть увидеть этот список с группой верхнего уровня «Статус» и вторым уровнем «Имя». Все это должно быть настраиваемо с помощью пользовательского интерфейса, и я изо всех сил пытаюсь найти лучший способ добиться этого.
Я кратко рассмотрел объект CollectionViewSource, но не смог найти хороший способ заставить его динамически создавать TreeView.
У меня такое чувство, что мне нужно сделать несколько умных шаблонов в XAML - это насколько я могу ...
<Window.Resources>
<DataTemplate x:Key="DocumentTemplate">
<DockPanel>
<TextBlock Text="{Binding Name}" />
</DockPanel>
</DataTemplate>
<HierarchicalDataTemplate x:Key="GroupTemplate"
ItemsSource="{Binding Path=Items}"
ItemTemplate="{StaticResource DocumentTemplate}">
<TextBlock Text="{Binding Path=Name}" />
</HierarchicalDataTemplate>
</Window.Resources>
<Grid>
<TreeView ItemsSource="{Binding Documents.View.Groups}"
ItemTemplate="{StaticResource GroupTemplate}"/>
</Grid>
public CollectionViewSource Documents
{
get
{
var docs = new CollectionViewSource();
docs.Source = DocumentFactory.Documents;
docs.GroupDescriptions.Add(new PropertyGroupDescription("CreatedBy"));
return docs;
}
}
Конечно, здесь отображается только группа верхнего уровня ("CreatedBy").
Прочитав вопрос ниже, мне удалось придумать лучший вопрос ...
Мой вопрос: возможно ли иметь общий HierarchicalDataTemplate для TreeView, который отображает пользовательские группы, примененные к CollectionViewSource.