XAML数据网格过滤赢得';不要使用过滤器
我正在尝试创建一个表单,它有两个选项卡,每个选项卡上都有一个DataGrid,上面有一个不同的过滤器。我已经创建了如下过滤器:XAML数据网格过滤赢得';不要使用过滤器,xaml,datagrid,observablecollection,Xaml,Datagrid,Observablecollection,我正在尝试创建一个表单,它有两个选项卡,每个选项卡上都有一个DataGrid,上面有一个不同的过滤器。我已经创建了如下过滤器: ObservableCollection<ParcelVoucherDetails> _voucherDetails = new ObservableCollection<ParcelVoucherDetails>(); CollectionView cvFreightOut = new CollectionView(_voucherDetai
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;
}
现在,这里是它变得烦人的地方。在稍后的事件中,当我向ObservaleCollection添加项时,我可以看到过滤器按预期启动并接受或拒绝过滤器,但所有项仍然显示在两个数据网格上
我尝试过使用CollectionViewSource,但也不起作用。我能让任何过滤工作的唯一方法是跳过ObservableCollection并使用DataTable和DataView。我希望在这里避免这种情况,因为代码的其余部分使用ObservableCollection很方便
有没有人看到这真的起作用了,如果是的话,是如何起作用的?我在头撞到墙上后终于找到了它。我现在觉得很可笑,但我必须分享解决方案:
ListCollectionView cvFO = new ListCollectionView(_voucherDetails);
cvFO.Filter += FreightOutFilter;
dgFreightOut.ItemsSource = cvFO;
ListCollectionView cvFI = new ListCollectionView(_voucherDetails);
cvFI.Filter += FreightInFilter;
dgFreightIn.ItemsSource = cvFI;
这将分别设置过滤器。显然,使用通用CollectionView而不是ListCollectionView是一个禁忌:)