【问题标题】:treeview Multibinding in wpfwpf中的treeview多绑定
【发布时间】:2011-04-01 18:25:20
【问题描述】:

我想将树视图绑定到这样的类:

public class Folder : Base_FileFolder
{
    public Folder()
    {
        Folders = new ObservableCollection<Folder>();
        Files = new ObservableCollection<File>();
    }
    public ObservableCollection<Folder> Folders { get; set; }
    public ObservableCollection<File> Files { get; set; }
}

其他类是:

public class File : Base_FileFolder
{
}

public class Base_FileFolder : DependencyObject
{
    public string Name
    {
        get { return (string)GetValue(NameProperty); }
        set { SetValue(NameProperty, value); }
    }
    public static readonly DependencyProperty NameProperty = DependencyProperty.Register("Name", typeof(string), typeof(Base_FileFolder), new UIPropertyMetadata(""));
}

如何创建显示文件和文件夹集合的树视图

我想用这样的东西:

 <HierarchicalDataTemplate
 DataType="{x:Type model:Folder}"
 ItemsSource="{Binding Childs}">   
 <DockPanel>
       <Label Content="{Binding Name}"/>    </DockPanel>
 </HierarchicalDataTemplate>

所以我得到了这样的东西:

根文件夹

|
|-File
|-File
|-Folder
  |-File
  |-File
  |-Folder
    |-File

【问题讨论】:

  • 当我想用 XDocument 中每个元素的每个属性填充树视图时遇到的完全相同的问题,我可以迭代一个元素或所有元素的属性,但是迭代所有元素和每个元素的所有属性让我陷入了一个循环。不记得我做了什么,但这浪费了我很多时间。

标签: c# wpf multibinding


【解决方案1】:

您的问题到底是什么?如何将它们结合起来? CompositeCollection.

编辑:如 cmets 中所述,我的 Intuipic 应用程序执行的操作与您的请求非常相似。截图如下:

【讨论】:

  • Intuipic (intuipic.codeplex.com) 是我不久前写的一个项目。您可能想检查一下。
  • @KenBoogaart,真的吗? “Intuipic 是一个易于使用的图像查看器。它的目标是直观易用,同时具有功能性。”这听起来不像是这个问题。
  • @John:如果您愿意实际查看,您会发现它显示的文件夹和文件树视图与 OP 请求的完全一样。
  • 我想看看,我只是不想花时间运行 clickonce 安装程序或浏览 codeplex 源代码树来查看可能有用或可能没有用的东西。 codeplex 网站上的任何屏幕截图或任何我能找到的任何内容都没有显示海报所要求的树形视图。如果您说“您可能想查看该项目中的文件 x\y\z 以查看。我是如何做到的”,那么您的原始注释会更有帮助。
  • @John:你可能没有动力去看,但我相信 OP 是。
【解决方案2】:

考虑到你的星座,这很容易。

首先:调整你的课程。您不需要文件夹类中的文件和文件夹的两个单独的列表。只需在 Base_FileFolder 类中使用一个 IList&lt;Base_FileFolder&gt;(良好的 OOP)并将其命名为 Children!

那么您只需要再执行两个步骤:

  1. 两个 HierarchicalDataTemplates

    <HierarchicalDataTemplate DataType="{x:Type FolderNode}"  ItemsSource="{Binding Path=Children}">
        <Grid>
            <TextBlock Text="{Binding FolderName}" />
        </Grid>
    </HierarchicalDataTemplate>
    
    <HierarchicalDataTemplate DataType="{x:Type FileNode}"  ItemsSource="{Binding Path=Children}">
        <Grid>
            <TextBlock Text="{Binding FileName}" />
        </Grid>
    </HierarchicalDataTemplate>
    
  2. 还有这样的 TreeView

    <TreeView Name="TreeViewFileTree" ItemsSource="{rootFolder.Children}" />
    

就是这样。 WPF 的优势在于它的简单性。

【讨论】:

    【解决方案3】:

    你需要使用 你需要三样东西:

    1. 一个 HierarchicalDataTemplate,就像你有,做父母+孩子,模板文件夹。您可能可以在此处使用 CompositeCollection 来合并文件夹+文件,但我不确定...您可能必须向您的文件夹类添加另一个属性,该属性返回文件和文件夹的联合并调用它“孩子”或其他什么...
    2. 树中模板文件的 DataTemplate
    3. 一个模板选择器,用于告诉树根据树中的项目在模板之间切换。不要在树上设置 ItemTemplate,而是将 ItemTemplateSelector 设置为此。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-23
      • 2021-12-08
      • 1970-01-01
      • 2011-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多