在尝试过滤ICollectionView时,我遇到了较大的性能问题。
集合中填充了大约90000行(12列)。
此刻我尝试过的事情:
VirtualizingStackPanel.IsVirtualizingWhenGrouping
RowVirtualization
和ColumnVirtualization
Dispatcher
(仍然不知道目的和原因)这里提供的代码显示了我要完成的工作:
private ICollectionView abcdxView;
public ICollectionView AbcdxView
{
get
{
if (abcdxView == null)
{
abcdxView = CollectionViewSource.GetDefaultView(context.ut_abcdx.ToList());
}
return abcdxView;
}
set
{
abcdxView = value;
OnPropertyChanged("AbcdxView");
}
}
private void UpdateAbcdxFilter()
{
dispatcher.BeginInvoke(new Action(() =>
abcdxView.Filter = w =>
(string.IsNullOrEmpty(IndeksFilter) ? true : StringFilter.Like(((ut_abcdx)w).indeks, IndeksFilter))));
}
private string indeksFilter;
public string IndeksFilter
{
get { return indeksFilter; }
set
{
indeksFilter = value;
UpdateAbcdxFilter();
OnPropertyChanged("IndeksFilter");
}
}
<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding AbcdxView,UpdateSourceTrigger=PropertyChanged}"
RowDetailsVisibilityMode="VisibleWhenSelected"
EnableColumnVirtualization="True" VirtualizingStackPanel.IsVirtualizingWhenGrouping="True" EnableRowVirtualization="True">
public static bool Like(string toSearch, string toFind)
{
if (toSearch != null)
{
Regex findRegex = new Regex(Regex.Escape(toFind).Replace("%", ".*"), RegexOptions.IgnoreCase);
return findRegex.IsMatch(toSearch);
}
return false;
}
我必须承认StartsWith
中的UpdateFilter()
方法的运行速度要快得多,但这不是我期望的。
我已经不知道如何管理它了。你能帮忙吗?