【发布时间】:2012-01-18 13:38:56
【问题描述】:
我正在使用绑定到 WPF DataGrid 的 ObservableCollection,该集合包含自定义类的实例(大约 500 个)并且自定义类是相对基本的(2 个字符串、一个 IP 和一个自定义枚举)
当文本输入到文本框中时,我正在使用以下代码过滤网格(使用所有列)。
private void searchBox_TextChanged(object sender, TextChangedEventArgs e)
{
CollectionViewSource SearchView = new CollectionViewSource();
SearchView.Filter += Search_Filter;
SearchView.Source = HostList;
dataGridMain.ItemsSource = SearchView.View;
}
void Search_Filter(object sender, FilterEventArgs e)
{
if (e.Item != null)
{
Host host = e.Item as Host;
try
{
bool foundInHost = false;
bool foundInIP = false;
bool foundInUser = false;
foundInHost = host.Hostname.ToLower().Contains(searchBox.Text.ToLower());
foundInIP = host.IP.ToString().Contains(searchBox.Text.ToLower());
foundInUser = host.Username.ToString().Contains(searchBox.Text.ToLower());
if (foundInHost || foundInIP || foundInUser)
{
e.Accepted = true;
}
else
{
e.Accepted = false;
}
}
catch (Exception ex)
{
}
}
}
它可以工作,但即使在我闪亮的新 i7 笔记本电脑上也需要太长时间。
谁能建议一种更快的过滤可观察集合的方法?
【问题讨论】:
标签: c# .net wpf windows filtering