通过这段代码,我设置了数据网格的 ItemsSource。但是,我有更多的 wpf 控件需要过滤数据网格,例如从一个时间范围。我可以为此编写一个新查询,但这似乎没有必要,因为数据已经可用,我只需要对其进行过滤。执行此操作的最佳方法是什么?
如果我能得到任何帮助,我将不胜感激!
DateTime dateStart = CalenderSearch.SelectedDates.First();
DateTime dateEnd = CalenderSearch.SelectedDates.Last();
ObjectQuery<Fouten> fouten = eventsEntities.Foutens;
var query =
(from fout in fouten
where dateStart <= fout.Datum && dateEnd >= fout.Datum && fout.Rapporten.Treinen.NameTrein == trein.NameTrein
orderby fout.Datum, fout.Time
select new
{
Datum = fout.Datum,
Time = fout.Time,
FoutCode = fout.FoutCode,
Omschrijving = fout.Omschrijving,
Teller = fout.Teller,
Module = fout.Module,
FoutId = fout.FoutId
}).AsEnumerable().Select(x => new Fouten
{
Datum = x.Datum,
Time = x.Time,
FoutCode = x.FoutCode,
Omschrijving = x.Omschrijving,
Teller = x.Teller,
Module = x.Module,
FoutId = x.FoutId
}).ToList();
if (query.Count == 0)
foutensDataGrid.ItemsSource = null;
else
foutensDataGrid.ItemsSource = query;
最佳答案
在 WPF 中,每个集合都用作 ItemsSource
在 GUI 元素中有一个 ICollectionView
与之相关。
ICollectionView
有一个 Filter
属性,类型为 Predicate<object>
.
如果你设置这个Filter
并调用 Refresh()
之后,DataGrid 将自行更新以仅显示 Filter
所在的项目返回真。
如何使用它的示例:
var collectionView = CollectionViewSource.GetDefaultView(foutensDataGrid.ItemsSource);
collectionView.Filter = o => {
var fouten = o as Fouten;
//do your filtering, e.g.
return fouten.Datum <= dateEnd && fouten.Datum >= dateStart;
}
collectionView.Refresh();
关于c# - 过滤项目来源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35765918/