xsd2code で作成されたオブジェクト階層があります。オブジェクト階層は、タイプ Project のルート オブジェクトで構成されます。このルート オブジェクトには、folder という名前の Folder の ObservableCollection が含まれています。これは、folder という名前の Folder と file という名前の File の ObservableCollection を含む再帰オブジェクトです。このオブジェクト階層を ObjectDataProvider を介して TreeView にバインドし、 HierarchicalDataTemplate 定義による表示
ObjectDataProvider と DataTemplates は、このように App.xaml にマージされたリソースで定義されます
<HierarchicalDataTemplate x:Key="projectTemplate"
DataType="{x:Type model:Project}"
ItemsSource="{Binding Path=folder}"
>
<Grid ToolTip="{Binding Path=Name}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="16" />
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Image Source="Images/folder_documents_512.ico" Grid.Column="0"/>
<TextBlock Grid.Column="1" Margin="6,0,0,0"
Text="{Binding Path=Name}"
/>
</Grid>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate
DataType="{x:Type model:Folder}"
ItemsSource="{Binding Path=file}">
<Grid ToolTip="{Binding Path=name}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="16" />
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Image Source="Images/folder_vectors_512.ico" Grid.Column="0"/>
<TextBlock Grid.Column="1" Margin="6,0,0,0"
Text="{Binding Path=name}"
/>
</Grid>
</HierarchicalDataTemplate>
<DataTemplate
DataType="{x:Type model:File}">
<Grid ToolTip="{Binding Path=name}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="16" />
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Image Source="Images/article-24.png" Grid.Column="0"/>
<TextBlock Grid.Column="1" Margin="6,0,0,0"
Text="{Binding Path=name}"
/>
</Grid>
</DataTemplate>
<ObjectDataProvider
x:Key="project"
>
</ObjectDataProvider>
TreeView は次のように定義されます
<TreeView x:Name="tvProject"
ItemsSource="{Binding Source={StaticResource project}}"
>
グローバル処理は次のとおりです。Xml ファイルからオブジェクト階層を読み込みます (xsd2code 機能)。デバッグでわかるように、オブジェクト階層はきれいです。次に、次のようなコードでオブジェクト階層を ObjectDataProvider にバインドします。
ObjectDataProvider dp = Application.Current.FindResource("project") as ObjectDataProvider;
dp.ObjectInstance = _project;
さて、TreeView には何も表示されません。何が欠けていますか?