tldr : CollectionViewSource.Filter는 다른 컨트롤로 덮어 씁니다. 컨트롤에서 미리 필터링 된 컬렉션 만 볼 수 있도록 두 단계의 필터링을 수행하려면 어떻게해야합니까?CollectionViewSources를 중첩 할 수 있습니까?
ICollectionView를 통해 내 viewmodel의 컬렉션에 바인딩하는 제 3 자 그리드 컨트롤이 있습니다.
private CollectionViewSource _filteredCollection;
public ItemListViewModel (List<ItemViewModel> items)
{
_items = items;
_filteredCollection = new CollectionViewSource {Source = _items};
}
public ICollectionView AllInstructions
{
get { return _filteredCollection.View; }
}
잘 작동하고 gridcontrol이 자체 필터링, 그룹화 및 정렬을 수행 할 수 있습니다. 는 지금은 예상대로
public ItemListViewModel (List<ItemViewModel> items)
{
...
_filteredCollection.Filter += new FilterEventHandler(FilterByDate);
}
private void FilterByDate(object sender, FilterEventArgs e)
{
var item = e.Item as ItemViewModel;
if (item == null)
{
e.Accepted = false;
}
else
{
e.Accepted = item.CreatedDate >= _selectedDate;
}
}
나의 새로운 필터가 작동 (오늘의 항목을 표시, 즉 버튼)을 격자의 한 전에 내 자신의 필터를 적용 할. 문제는 gridcontrol이 제대로 작동하지 않고 자체 필터를 덮어 쓰는 것입니다.
필자가 생각한 것은 _filteredCollection CVS에서 필터링을 수행 한 다음 gridcontrol에 전달하는 다른 CollectionViewSource 또는 CollectionView를 만드는 것이 었습니다.
ICollectionView에서 _filteredCollection을 래핑하면 필터링의 두 계층이 완벽하게 작동하지만 ICollectionView의 기본 생성자에 CanSort 및 CanGroup이 false로 설정되어 있기 때문에 정렬하거나 그룹화 할 수 없습니다.
내가 알 수없는 것은 _filteredCollection을 두 번째 CollectionViewSource의 생성자에 공급하는 방법입니다. 가능합니까 아니면 잘못된 각도에서이 문제에 접근하고 있습니까?