代码之家  ›  专栏  ›  技术社区  ›  STW

.NET WinForms数据绑定-BindingList<IBindableItem>,其中IBindableItem的某些实现也可能实现IList

  •  1
  • STW  · 技术社区  · 17 年前

    这与 another question 不幸的是,我很难在我的标题中总结这个问题,所以请耐心听我说。

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

    目的是能够将数据绑定到 文件夹 并让数据绑定遍历文件夹树(以及n级子文件夹)和叶。然而,数据绑定并没有下降到数据库的底层绑定列表中 文件夹 文件夹 数据绑定时似乎没有子项。

    ,这是正确的,但没有意识到 文件夹 除了一个例子之外,还有别的吗 .

    我的问题是 二者都 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;
            }
        }
    }
    
    1 回复  |  直到 9 年前
        1
  •  1
  •   skolima    17 年前

    你可能想考虑拥有孩子财产吗?

    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; }
    }