1

这与我的另一个问题有关,不幸的是,我很难在我的标题中总结这个问题——所以请多多包涵。

我创建了一个名为的数据绑定类Folder,它实现了一个ITreeItem接口并继承自BindingList<ITreeItem>. 我有第二个类 ,TreeLeaf它是树中的一片叶子,一个不能包含更多子项的终点。

目的是能够数据绑定到 aFolder并让数据绑定遍历文件夹树(和 n 级子文件夹)和叶子。但是,数据绑定不会下降到 a 的基础 BindingList 中Folder,因此在数据Folder绑定时似乎没有子项。

到目前为止,看起来数据绑定正在将文件ITreeItemFolder作为ITreeItem.

我的问题是:我如何才能暴露文件夹既是实现ITreeItem又是后代的数据绑定BindingList<ITreeItem>;或者我怎样才能挂钩数据绑定以帮助它走下结构?

这是迄今为止的实现示例:

using System.ComponentModel;
using System.Windows.Forms;

namespace TreeData
{
    public interface ITreeItem
    {
        string Name { get; set; }
    }

    class TreeLeaf : ITreeItem
    {
        public TreeLeaf(string name)
        {
            Name = name;
        }

        public string Name { get; set; }
    }

    class Folder : BindingList<ITreeItem>, ITreeItem
    {
        public Folder(string name)
        {
            Name = name;
        }

        public string Name { get; set; }
    }

    class Example
    {
        public Example()
        {
            var rootFolder = new Folder("Root");
            var subFolder1 = new Folder("Folder1");
            var subFolder2 = new Folder("Folder2");

            rootFolder.Add(subFolder1);
            rootFolder.Add(subFolder2);

            subFolder1.Add(new TreeLeaf("Item1"));
            subFolder1.Add(new TreeLeaf("Item2"));

            subFolder2.Add(new TreeLeaf("Item3"));
            subFolder2.Add(new TreeLeaf("Item4"));

            var treeDataSource = new BindingSource();
            treeDataSource.DataSource = rootFolder;

            // For my purposes the 'bindableControl' is
            // an Infragistics UltraTree or UltraGrid.
            //bindableControl.DataSource = treeDataSource;
        }
    }
}
4

1 回答 1

1

您可能要考虑改为拥有 Children 属性?

public class Folder : ITreeItem
{
    public Folder(string name)
    {
        Name = name;
        Children = new BindingList<ITreeItem>();
    }

    public string Name { get; set; }

    public BindingList<ITreeItem> Children { get; private set; }
}
于 2009-08-21T19:11:38.977 回答