1

我正在尝试从 ObjectListView 组件中搜索和过滤 TreeListView 对象的结果。目前,我正在将其实现到具有以下类的 C# (.NET 4.0) 项目中

MyAbstract、MyDir(继承 MyAbstract)和 MyFile(也继承 MyAbstract)。这些类具有以下属性:名称、标题、速度、速度类型。

我想知道如何正确地为此列表创建一个类似查询的过滤器,例如:

Speed < 10 OR SpeedType == "RPM"

我可能会使用 LINQ,但我的主要问题是如何使用 TreeListView 应用和管理它。我的主要问题是:

  1. 如何在 TreeListView 上创建这种过滤?

  2. 如何使 TreeListView 只显示过滤后的结果

  3. 如何使其保存原始列表以具有清晰的过滤器按钮。

这是我目前设置列表的方式:

public void Init()
{
    Project.LoadDirectory();

    treeListView1.SetObjects(new object[] { Project.Root });

    treeListView1.CanExpandGetter = delegate(object x)
    {
        return (x is MyDir);
    };

    treeListView1.ChildrenGetter = delegate(object x)
    {
        return ((MyDir)x).Nodes;
    };

    olvColumn1.ImageGetter = new ImageGetterDelegate(this.TreeViewImageGetter);
}

我查看了文档,但我仍然不清楚。

4

1 回答 1

3

你试过什么?

这将过滤TreeListView以仅显示MyFile与您在问题中给出的条件相匹配的对象:

this.treeListView.ModelFilter = new ModelFilter(delegate(object x) {
    var myFile = x as MyFile;
    return x != null && (myFile.Speed < 10 || myFile.SpeedType == "RPM");
});

要停止过滤,只需再次清除文件:

this.treeListView.ModelFilter = null;

项目附带的演示显示了所有这些行为。

于 2015-02-14T05:06:50.043 回答