Wpf IEditableCollectionView可筛选出已删除的对象

Wpf IEditableCollectionView可筛选出已删除的对象,wpf,data-binding,crud,Wpf,Data Binding,Crud,我正在使用自己的派生ObservableCollection,它实现了ICollectionViewFactory,允许我在其上创建自己的IEditableCollectionView。该视图的(主要)用途是允许筛选出标记为“已删除”的对象,以便这些记录不会显示给用户,但仍保留在集合中,只要它们没有标记为“已接受”或已回滚 我走对了吗?或者这不是IEditableCollectionView的目的 更新:集合必须支持添加、删除和编辑记录 第二次更新:标记为“已删除”的记录必须仍在源集合中,因为删

我正在使用自己的派生
ObservableCollection
,它实现了
ICollectionViewFactory
,允许我在其上创建自己的
IEditableCollectionView
。该视图的(主要)用途是允许筛选出标记为“已删除”的对象,以便这些记录不会显示给用户,但仍保留在集合中,只要它们没有标记为“已接受”或已回滚

我走对了吗?或者这不是
IEditableCollectionView
的目的

更新:集合必须支持添加、删除和编辑记录


第二次更新:标记为“已删除”的记录必须仍在源集合中,因为删除操作可以回滚。

我认为您所追求的目标可以更容易实现

假设你有一个模特

并且您的ViewModel包含一个集合

public ObservableCollection<Item> MyItems { get; set; }
过滤逻辑:

// Collection which will take your ObservableCollection
var itemSourceList = new CollectionViewSource { Source = MyItems };

// ICollectionView the View/UI part 
UndeletedItems = itemSourceList.View;

//add the Filter
UndeletedItems.Filter = new Predicate<object>(item => !((Item)item).IsDeleted);
这将隐藏已删除的项目,同时仍支持CRUD操作


希望这有助于

如果语法有点错误,请原谅,我是根据记忆写的。此外,我忽略了
INotifyPropertyChanged
,只是为了举例。我更新了问题,指出集合必须仍然支持经典的CRUD操作。除非我弄错了(毕竟我是WPF新手),否则在您的场景中,UndeletedItems将返回一个不允许网格添加或删除记录的可枚举项。@Crono1981目前无法对其进行测试或处理,但我明天在Visual Studio面前进行测试并相应更新我的答案。@Crono1981更新了我的答案。希望它能有所帮助:)上传我的代码会很困难,因为它依赖于很多其他代码。而且,我要放弃这个了。我将使用一个派生的BindingList,它将保留已删除记录的内部集合,以便可以随时回滚这些记录。不过谢谢你的帮助。
public ICollectionView UndeletedItems { get; set; }
// Collection which will take your ObservableCollection
var itemSourceList = new CollectionViewSource { Source = MyItems };

// ICollectionView the View/UI part 
UndeletedItems = itemSourceList.View;

//add the Filter
UndeletedItems.Filter = new Predicate<object>(item => !((Item)item).IsDeleted);
<DataGrid ItemsSource="{Binding UndeletedItems}" AutoGenerateColumns="False">
    <DataGrid.Columns>
         <DataGridTextColumn Binding="{Binding Name}"/>
    </DataGrid.Columns>
</DataGrid>