我遇到了一个奇怪的问题,我有一个网格被过滤,当我在网格上修改一个值时,该行被删除,因为它不再符合过滤条件。< / 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
当我进行更改时,我不希望过滤器更新,直到我将这些更改保存并传播到数据库之后。
答案 0 :(得分:0)
我认为您最简单的解决方案是使用单独的集合来绑定您的视图。使用Linq在最适合的任何点过滤您的数据。 我想你会发现这个:
re-captcha div{
border: 1px solid #ccc;
}
不仅仅是ICollectionView,它也是ListCollectionView或类似的东西。这将应用您的过滤器作为observablecollection中的基础项目。 看来你可能希望observablecollection的其他方面可以工作,但你不希望过滤在这个阶段启动,然后在代码中明确地执行它,你可以准确地控制你想要发生什么。