Я пытаюсь создать форму с двумя вкладками, каждая с DataGrid с различным фильтром. Я создал фильтры как таковые:
ObservableCollection<ParcelVoucherDetails> _voucherDetails = new ObservableCollection<ParcelVoucherDetails>();
CollectionView cvFreightOut = new CollectionView(_voucherDetails);
cvFreightOut.Filter += FreightOutFilter;
dgFreightOut.ItemsSource = cvFreightOut;
CollectionView cvFreightIn = new CollectionView(_voucherDetails);
cvFreightIn.Filter += FreightInFilter;
dgFreightIn.ItemsSource = cvFreightIn;
Затем я создал фильтры так:
public bool FreightOutFilter(object o)
{
ParcelVoucherDetails p = o as ParcelVoucherDetails;
if (p != null)
{
return (p.Type == "Freight Out");
}
return false;
}
public bool FreightInFilter(object o)
{
ParcelVoucherDetails p = o as ParcelVoucherDetails;
if (p != null)
{
return (p.Type == "Freight In");
}
return false;
}
Теперь вот где это раздражает. Во время более позднего события, когда я добавляю элементы в ObservableCollection, я вижу, как фильтры запускают и принимают или отклоняют фильтр, как и ожидалось, но ВСЕ элементы по-прежнему появляются в обеих DataGrids.
Я пытался использовать CollectionViewSource, но это тоже не работает. Единственный способ заставить работать любую фильтрацию - пропустить ObservableCollection и использовать DataTable с DataViews. Я хотел бы избежать этого из-за удобства в остальной части кода для использования ObservableCollection.
Кто-нибудь видел, как это действительно работает, и если да, то как?