【发布时间】:2011-02-28 23:31:55
【问题描述】:
我有一个用 xsd2code 创建的对象层次结构。对象层次结构 由 Project 类型的根对象组成,其中包含 ObservableCollection 名为文件夹的文件夹,它是一个包含 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 中什么也没有出现。 我错过了什么?
【问题讨论】:
标签: wpf treeview hierarchicaldatatemplate objectdataprovider