【问题标题】:TreeView display hierarchical dataTreeView 显示分层数据
【发布时间】:2015-09-14 15:23:01
【问题描述】:

我有以下两个模型类:

public class FileItem : NotifyBase
{
    public FileItem(string fullPath)
    {
        FullPath = fullPath;
    }

    public string FullPath
    {
        get { return Get<string>(); }
        set
        {
            Set(value);
            OnPropertyChanged("FileName");
            OnPropertyChanged("Directory");
        }
    }

    public string Directory
    {
        get { return Path.GetDirectoryName(FullPath); }
    }

    public string FileName
    {
        get { return Path.GetFileName(FullPath); }
    }
}

public class Directory : NotifyBase
{
    public Directory(string fullPath)
    {
        FullPath = fullPath;
        Files = new ObservableCollection<FileItem>();
        Directories = new ObservableCollection<Directory>();
    }

    public ObservableCollection<FileItem> Files
    {
        get { return Get<ObservableCollection<FileItem>>(); }
        set { Set(value); }
    }

    public ObservableCollection<Directory> Directories
    {
        get { return Get<ObservableCollection<Directory>>(); }
        set { Set(value); }
    }

    public string FullPath
    {
        get { return Get<string>(); }
        set
        {
            Set(value);
            OnPropertyChanged("DirectoryName");
        }
    }

    public string DirectoryName
    {
        get
        {
            string[] directoryNameSplit = FullPath.Split(new[] { "\\" }, StringSplitOptions.RemoveEmptyEntries);
            if (directoryNameSplit.Length > 0)
            {
                return directoryNameSplit[directoryNameSplit.Length - 1];
            }
            return "UNKNOWN";
        }
    }
}

NotifyBase 类只是INotifyPropertyChanged 的一个实现。

我从文件系统加载数据,所以我有一个对象层次结构。现在我想在视图中将Directorys 和FileItems 的层次结构显示为TreeView

在 ViewModel 中,我有一个名为 Directories 的 ObservableCollection&lt;Directory&gt; 与根节点。

我的观点是:

<TreeView Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" Margin="5" x:Name="tv"
          ItemsSource="{Binding Directories, UpdateSourceTrigger=PropertyChanged}">
    <TreeView.Resources>
        <HierarchicalDataTemplate DataType="{x:Type model:Directory}" ItemsSource="{Binding Directories}">
            <Label Content="{Binding Path=DirectoryName}" VerticalAlignment="Center"/>
        </HierarchicalDataTemplate>

        <DataTemplate DataType="{x:Type model:FileItem}">
            <Label Content="{Binding FileName}" VerticalAlignment="Center" Background="Red"/>
        </DataTemplate>
    </TreeView.Resources>
</TreeView>

所有文件夹都完美显示,但我没有看到任何FileItems,我不知道为什么。我在这里做错了什么?

【问题讨论】:

    标签: c# wpf treeview hierarchicaldatatemplate


    【解决方案1】:

    因为您将两个集合分开,并且您没有在任何地方绑定到Files

    不是两个集合,而是一个包含两种类型的集合。

    【讨论】:

    • 我需要这个结构来表示目录的深层层次结构。或者你会如何解决这个问题?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-07
    • 1970-01-01
    • 2011-08-27
    • 1970-01-01
    • 2015-10-11
    • 2012-12-26
    • 1970-01-01
    相关资源
    最近更新 更多