私はこのようになりますTreeView
:CollectionViewGroupグループを持つ慣用的なXAML TreeViewは何ですか?
<TreeView Grid.Row="1" x:Name="InspectionResultsTreeView"
ItemsSource="{Binding Source={StaticResource InspectionTypeGroupViewSource}, Path=Groups}"
ItemTemplate="{StaticResource InspectionTypeGroupsTemplate}">
</TreeView>
ItemsSource
がInspectionTypeGroupViewSource
の名前で行く鍵付きのリソースです:
<CollectionViewSource x:Key="InspectionTypeGroupViewSource" Source="{Binding Results}">
<CollectionViewSource.GroupDescriptions>
<PropertyGroupDescription PropertyName="Inspection.InspectionType" />
<PropertyGroupDescription PropertyName="Inspection" />
</CollectionViewSource.GroupDescriptions>
</CollectionViewSource>
この小さな事の役割はViewModelに年代を取ることですResults
プロパティ:
private ObservableCollection<ICodeInspectionResult> _results;
public ObservableCollection<ICodeInspectionResult> Results
{
get { return _results; }
set { _results = value; OnPropertyChanged(); }
}
... 2レベルInspectionType
によって、次にInspection
によって、検査結果、検査、および個々の検査結果を含む3レベルの階層が生成されます。スクリーンショットは、私が推測する可視化に役立つかもしれない。この時点で:
ので、InspectionResultsTreeView
のItemTemplate
はInspectionTypeGroupsTemplate
の名前で、別のキー付きのリソースである - それは、大胆「検査タイプ」の項目です:
<HierarchicalDataTemplate x:Key="InspectionTypeGroupsTemplate"
DataType="{x:Type CollectionViewGroup}"
ItemsSource="{Binding Items}"
ItemTemplate="{StaticResource InspectionGroupsTemplate}">
<StackPanel Orientation="Horizontal">
<TextBlock VerticalAlignment="Center"
Text="{Binding Name}"
FontWeight="Bold"
TextWrapping="NoWrap"/>
<TextBlock Margin="4,0,4,0"
VerticalAlignment="Center"
Text="{Binding ItemCount, StringFormat=({0})}"
TextWrapping="NoWrap"/>
</StackPanel>
</HierarchicalDataTemplate>
そして、そのテンプレートのItemTemplate
はInspectionGroupsTemplate
ある - それは、「重要度」のアイコンで、個々の検査です:
<HierarchicalDataTemplate x:Key="InspectionGroupsTemplate"
DataType="{x:Type CollectionViewGroup}"
ItemsSource="{Binding Items}"
ItemTemplate="{StaticResource InspectionResultTemplate}">
<StackPanel Orientation="Horizontal">
<Image Style="{StaticResource IconStyle}"
Source="{Binding Name, Converter={StaticResource InspectionIconConverter}}"
VerticalAlignment="Center" />
<TextBlock Margin="4"
VerticalAlignment="Center"
Text="{Binding Name, Converter={StaticResource InspectionDescriptionConverter}}"
TextWrapping="NoWrap"/>
<TextBlock Margin="0,4,0,4"
VerticalAlignment="Center"
Text="{Binding ItemCount, StringFormat=({0})}"
TextWrapping="NoWrap"/>
</StackPanel>
</HierarchicalDataTemplate>
最後に、このグループのItemTemplate
は、個々の検査結果のためであるInspectionResultTemplate
、次のとおりです。
<DataTemplate x:Key="InspectionResultTemplate"
DataType="{x:Type inspections:ICodeInspectionResult}">
<StackPanel Orientation="Horizontal">
<TextBlock VerticalAlignment="Center"
Margin="4"
Text="{Binding Name}"
TextWrapping="NoWrap"/>
</StackPanel>
</DataTemplate>
ICodeInspectionResult
インターフェースは、私がここで使っているstring Name
性質を持っています。このName
はグループ化レベルで使用されているName
とは異なり、object CollectionViewGroup.Name
です。Name
の基になるタイプはグルーピングのものなので、レベル1はInspectionType
、レベル2はInspection
です。
問題は、これを変換してアクセスして表示する必要があるメンバーにアクセスする必要があると思っているよりも多くのコンバーターを使用していることです...しかし、その後数を表示する必要があります各グループ内のアイテムはDataType
でCollectionViewGroup
...そうでしょうか?
どのように表示する必要があるすべてのコンバータを使用せずにこれを行うことができますか? はどのようにしてとしますか?すべてTreeView
/CollectionViewGroup
チュートリアル私は簡単な実装でした。