ObjectListView 高级搜索和过滤

ObjectListView advanced search and filtering

我正在尝试在 ObjectListView 组件的 TreeListView object 上搜索和过滤结果。目前,我正在将其实现到具有以下 类

的 C# (.NET 4.0) 项目中

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

我想知道如何正确地为这个列表创建一个 query-like 过滤器,例如:

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

我看过了the documentation,但我还是不清楚。

你试过什么?

这将过滤 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;

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