我的应用程序(c#wpf)有一个列表框绑定到一组ViewModels,它们将这些VM显示为单独的UserControls。昨晚我尝试通过从CollectionViewSource创建ICollectionView来实现过滤器,虽然过滤有效,但它正在泄漏内存。似乎每次运行过滤器时都会创建一个额外的集合,而不是处理它。
我真的不知道自己在做什么,而且我主要是在学习。我之前没有以这种方式使用过CollectionViewSource,所以我不熟悉。
过程:
步骤1:填充列表JobTileVMs
第2步:CreateJobFilter()
private void CreateJobFilter(Task obj)
{
View = CollectionViewSource.GetDefaultView(JobTileVMs);
View.Filter = null;
}
第3步:我的ListBox绑定到View
private ICollectionView view;
public ICollectionView View
{
get { return view; }
set
{
Set(ref view, value);
}
}
步骤4:点击用户按钮后,运行过滤器
private void FilterCustomerJobs()
{
View.Filter = item =>
{
JobTileVM vm = item as JobTileVM;
if (vm.Jobs[0].Customer.StartsWith("SomeCustomer")) return true;
return false;
};
}
private void FilterCustomerJobs2()
{
View.Filter = item =>
{
JobTileVM vm = item as JobTileVM;
if (vm.Jobs[0].Customer.StartsWith("SomeOtherCustomer")) return true;
return false;
};
}
所以我现在所处的位置,过滤确实成功地过滤了显示的列表,但如果我在两个过滤器功能之间来回切换,我的记忆将继续增长。
我尝试了一下并没有提出太多,但我确实注意到我的view属性有一个参数UseLocalArray为true,或类似名称的东西。
那么,我做错了什么,我应该怎么做呢?