1

我已经实现了一个简单的搜索功能,它根据搜索查询突出显示 DataGrid 中的一行。它的要点如下所示:

public bool scrollToSearch(string query) {
    dataGrid.SelectedItems.Clear();

    for (; searchIndex < registrants.Count; searchIndex++) {
        foreach (string field in registrants[searchIndex]) {
            if (field.ToLower().Contains(query)) {
                dataGrid.SelectedItem = registrants[searchIndex];
                dataGrid.ScrollIntoView(registrants[searchIndex]);
                searchIndex++;
                return true;
            }
        }
    }     
}       

它在列表中搜索匹配项,然后突出显示(选择)该行并将其滚动到视图中。问题是,当对 DataGrid 进行排序时,搜索将突出显示看似随机的行而不是第一个结果,因为它正在搜索原始的未排序列表。有没有办法让我在排序列表中搜索它?

4

2 回答 2

1

我同意 Anurag 的评论,即 ListCollectionView 是正确的方法。有关 ListCollectionView 的文档,请参见此处。ListCollectionView 在源和显示之间创建另一个层,用于处理排序、过滤和分组。将您的 DataGrid 绑定到 ListCollectionView 并用于SetCurrent()指定所选项目。

于 2012-04-20T01:22:40.420 回答
0

首先这样做....

var view = CollectionViewSource.GetDefaultView(registrants);

然后viewregistrants您的代码中使用。

于 2012-04-20T05:12:45.150 回答