【问题标题】:Dynamically display TreeViewItem children动态显示 TreeViewItem 子项
【发布时间】:2014-02-24 02:05:31
【问题描述】:

我有一个带有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>

我将FileList 对象中的ObservableCollection 分配给TreeViewItemFileList 中的内部集合,然后刷新网格,但是这些子项没有出现。

我尝试了以下操作:TreeView not showing my Children

但我希望有可能打开/搜索尽可能多的级别。

任何帮助将不胜感激。

【问题讨论】:

    标签: c# wpf xaml treeview


    【解决方案1】:

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

    <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

    【讨论】:

    • 谢谢!这是一个很大的帮助。我现在可以显示子文件。我现在唯一的问题是我无法显示父母的姓名。我为每个顶部项目着色以识别它是文件还是文件夹,这是可见的,但我没有看到名称文本。我无法使用 DisplayMemberPath,因为已设置 ItemTemplate。
    • 哦,是的,抱歉,我似乎把你的模板弄混了。我编辑了我的答案,所以看看这对你是否更好。
    • 非常感谢。但是,我看不到数据模板如何为父级工作,因为它在&lt;HierarchicalDataTemplate ItemsSource="{Binding InnerFiles}"&gt; 中定义
    • A HierarchicalDataTemplate DataTemplate...它扩展了DataTemplate 类。
    猜你喜欢
    • 2013-09-24
    • 2015-03-18
    • 2011-03-03
    • 1970-01-01
    • 1970-01-01
    • 2011-03-27
    • 2010-12-14
    • 2021-11-03
    • 2015-01-24
    相关资源
    最近更新 更多