阻止ICollectionView更新PropertyChanged上的过滤器并从集合

时间:2018-03-27 23:47:12

标签: wpf entity-framework icollectionview

我遇到了一个奇怪的问题,我有一个网格被过滤,当我在网格上修改一个值时,该行被删除,因为它不再符合过滤条件。< / p>

我正在使用Entity Framework加载本地数据。

mydbcontext.myobject.LoadAsync();

然后我将网格ItemSource绑定到ICollectionView:

ICollectionView myitemslist = CollectionViewSource.GetDefaultView(mydbcontext.myobject.Local);

然后我使用(作为示例)

对数据集执行过滤
BusinessProfiles.Filter = f =>
{
    var a = f as MyObjectType;
    return a.propA == a.propB;
}

这完全有效,但是如果我然后使用网格修改对象使得这个条件不再成立,则对象将从集合中消失。

CollectionChanged事件正在解雇,但我并不期待它。

我的理解是,为了表现这种方式,我将不得不使用一个实现ICollectionViewLiveShaping的对象,如BindingListCollectionView或ListCollectionView

当我进行更改时,我不希望过滤器更新,直到我将这些更改保存并传播到数据库之后。

1 个答案:

答案 0 :(得分:0)

我认为您最简单的解决方案是使用单独的集合来绑定您的视图。使用Linq在最适合的任何点过滤您的数据。 我想你会发现这个:

re-captcha div{
    border: 1px solid #ccc; 
} 

不仅仅是ICollectionView,它也是ListCollectionView或类似的东西。这将应用您的过滤器作为observablecollection中的基础项目。 看来你可能希望observablecollection的其他方面可以工作,但你不希望过滤在这个阶段启动,然后在代码中明确地执行它,你可以准确地控制你想要发生什么。