通过此代码,我将设置我的datagrid的Itemsource。但是我得到了更多的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>。
ItemsSource
ICollectionView
Filter
Predicate<object>
如果您设置了该值Filter并Refresh()随后调用,则DataGrid将更新自身以仅显示Filter返回true的项目。
Refresh()
一个如何使用此示例:
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();