是否可以根据节点的基础类显示带有节点图像的树视图?

时间:2014-02-19 16:27:25

标签: c# wpf mvvm treeview

我有一个分层集合,用于表示目录结构,其中任何目录都可以包含目录和书签,任何书签都不能包含任何内容。这两个类都扩展了一个基本的抽象类。

当我尝试根据节点的类来处理与节点相关联的图像时,我遇到了问题。根据我用Google搜索的内容,我了解HierarchicalDataTemplate是要走的路,但我似乎在实现中遗漏了一些东西。使用下面的代码,即使书签包含值,也不会显示树。

以下是我正在使用的XAML:

<TreeView
    ItemsSource="{Binding Bookmarks}">
    <TreeView.Resources>

        <!-- Directories -->
        <HierarchicalDataTemplate
            DataType="{x:Type BaseBookmarks:BookmarkDirectory}"
            ItemsSource="{Binding Path=Children}">
            <TreeViewItem
                Header="{Binding SimpleName}">
                <Image
                    Source="/MapInterface;component/icons/16x16_BookmarkFolder.png" />
            </TreeViewItem>
        </HierarchicalDataTemplate>

        <!-- Bookmarks -->
        <HierarchicalDataTemplate
            DataType="{x:Type BaseBookmarks:Bookmark}">
            <TreeViewItem
                Header="{Binding SimpleName}">
                <Image
                    Source="/MapInterface;component/icons/16x16_Bookmark.png" />
            </TreeViewItem>
        </HierarchicalDataTemplate>

    </TreeView.Resources>
</TreeView>

1 个答案:

答案 0 :(得分:2)

您不必在DataTemplate中使用TreeViewItem。 TreeView将负责创建TreeViewItems并使用您的模板设置其content属性。 这应该有效:

 <TreeView ItemsSource="{Binding Bookmarks}">
        <TreeView.Resources>

            <!-- Directories -->
            <HierarchicalDataTemplate  DataType="{x:Type BaseBookmarks:BookmarkDirectory}"
                                       ItemsSource="{Binding Path=Children}">
                <StackPanel Orientation="Horizontal">
                    <Image Source="/MapInterface;component/icons/16x16_BookmarkFolder.png"/>
                    <TextBlock Text="{Binding SimpleName}"/>       
                </StackPanel>
            </HierarchicalDataTemplate>

            <!-- Bookmarks -->
            <HierarchicalDataTemplate DataType="{x:Type BaseBookmarks:Bookmark}">
                <StackPanel Orientation="Horizontal">
                    <Image Source="/MapInterface;component/icons/16x16_Bookmark.png" />
                    <TextBlock Text="{Binding SimpleName}"/>
                </StackPanel>
            </HierarchicalDataTemplate>

        </TreeView.Resources>
    </TreeView>