2

我一直在研究 ObjectListView for .NET,并尝试自己弄乱它。

我来自将 VirtualTreeview 与 Delphi 一起使用,所以如果你能指出相似之处,那就太好了!

我尝试使用 TreeListView 和以下类创建多级树:

public class MyClass
{
    public string Name { get; set; }
    public List<MyClass> MyClasses { get; set; }
    public MyClass(string name)
    {
        Name = name;
        MyClasses = new List<MyClass>();
    }
}

TreeListView 是一个设计时组件。我使用此代码创建虚拟数据并让 TreeListView 显示它。

var MyClasses = new List<MyClass>();
MyClasses.Add(new MyClass("Bob"));
MyClasses.Add(new MyClass("John"));
var myClass = new MyClass("Mike");
myClass.MyClasses.Add(new MyClass("Joe"));
MyClasses.Add(myClass);

treeListView1.SetObjects(MyClasses);

我还有一列显示 Name 属性。

所有这些都有效,除了我没有看到 Mike 节点的子节点。我似乎无法弄清楚在这里做什么。我查看了文档,但找不到任何有用的东西。

此外,像这样的多级结构可以与 ObjectListView 的其他变体(例如 FastObjectListView)一起使用吗?

4

3 回答 3

6

终于想通了!

显然,ObjectListView 套件的唯一变体可以通过设计用于树结构,是TreeListView

这是我设法让我的 TreeListView 显示以下类的列表的方法:

public class MyClass
{
    public string Name { get; set; }
    public List<MyClass> MyClasses { get; set; }
    public MyClass(string name)
    {
        Name = name;
        MyClasses = new List<MyClass>();
    }
}

在 Form 构造函数中,我们需要 2 个委托 - 一个用于告诉 OLV 对象有子对象,另一个用于将子对象列表传递给 OLV。

// model is the currently queried object, we return true or false according to the amount of children we have in our MyClasses List
treeListView1.CanExpandGetter = model => ((MyClass)model).
                                              MyClasses.Count > 0;
// We return the list of MyClasses that shall be considered Children.
treeListView1.ChildrenGetter = delegate(object model)
                                       {
                                           return ((MyClass) model).
                                                   MyClasses;
                                       };

// We also need to tell OLV what objects to display as root nodes
treeListView1.SetObjects(listOfObjects);

我还发现每次向父对象添加子对象时都需要刷新父对象。

于 2012-07-23T15:03:14.937 回答
1

我在这里找到了文档:http: //objectlistview.sourceforge.net/html/cookbook.htm#recipeTreeListView加上使用 ObjectListView 附带的演示非常好。

于 2013-02-01T02:55:01.927 回答
0

For anyone else having this issue, please note that setting the delegates MUST COME BEFORE setting the roots. The delegates are used internally to rebuild the representation of the tree when the roots are set.

于 2021-09-22T09:57:42.213 回答