动态显示TreeViewItem子项

时间:2014-02-23 01:13:05

标签: c# wpf xaml treeview

我有一个TreeView的WPF应用程序。我将文件和/或文件夹拖放到此TreeView上。如果拖动的项目是我设置为检测的文件夹,则搜索此目录的顶层。

我遇到的问题是在TreeView上显示这些内部文件。我希望这些内部文件显示为文件夹项的子项。

这是在TreeView中为项目建模的类:

public class FileList
{
    public enum FileType { File, Folder };

    public FileType Type { get; set; }
    public string Name { get; set; }

    private ObservableCollection<FileList> innerFiles;
    public ObservableCollection<FileList> InnerFiles
    {
        get
        {

            return innerFiles;
        }
        set
        {
            innerFiles = value;
        }
    }

    public FileList(string file)
    {
        Name = file;
        Type = FolderOrFile(file);
    }
}

这是TreeView.ItemTemplate

中的xaml代码
<HierarchicalDataTemplate>
    <TextBlock Text="{Binding Name}">
        <TextBlock.ContextMenu>
            <ContextMenu>
                <MenuItem Name="mnuExpand" Header="Expand" Click="mnuExpand_Click" />
            </ContextMenu>
        </TextBlock.ContextMenu>
     </TextBlock>

    <HierarchicalDataTemplate.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding InnerFiles}" />
        </DataTemplate>
    </HierarchicalDataTemplate.ItemTemplate>

</HierarchicalDataTemplate>

我将ObservableCollection FileListTreeViewItem个对象分配给FileList的{​​{1}}中的内部集合,然后刷新网格,但这些子项不会出现。

我尝试了以下内容:TreeView not showing my Children

但是我希望有可能打开/搜索尽可能多的关卡。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

您需要告诉HierarchicalDataTemplate子项的源使用ItemsSource属性的对象。试试这个:

<HierarchicalDataTemplate ItemsSource="{Binding InnerFiles}">
    <TextBlock Text="{Binding Name}"> <!-- DataTemplate for parent -->
        <TextBlock.ContextMenu>
            <ContextMenu>
                <MenuItem Name="mnuExpand" Header="Expand" Click="mnuExpand_Click" />
            </ContextMenu>
        </TextBlock.ContextMenu>
    </TextBlock>    
    <HierarchicalDataTemplate.ItemTemplate>
        <DataTemplate> <!-- DataTemplate for children -->
            <TextBlock Text="{Binding Name}" />
        </DataTemplate>
    </HierarchicalDataTemplate.ItemTemplate>    
</HierarchicalDataTemplate>

有关详细信息,请参阅MSDN上的HierarchicalDataTemplate Class