我正在使用我自己派生的ObservableCollection
来实现ICollectionViewFactory
,以允许我在其上创建自己的IEditableCollectionView
。视图的(主要)目的是允许过滤掉标记为“已删除”的对象,以便这些记录不会显示给用户,但仍保留在集合中,只要它们未标记为“已接受”即可或者回滚。
我在这里走在正确的轨道上吗?或者这不是IEditableCollectionView
的目的?
更新:该集合必须支持添加,删除和编辑记录。
第二次更新:标记为“已删除”的记录仍必须位于源集合中,因为可以回滚删除操作。
答案 0 :(得分:1)
我认为你所追求的目标可以更轻松地实现
假设你有一个模型
public class Item
{
public bool IsDeleted { get; set; }
public string Name { get; set; }
}
您的 ViewModel 包含一个集合
public ObservableCollection<Item> MyItems { get; set; }
您可以添加ICollectionView
属性,该属性将根据未删除的项目过滤您的收藏。这是一个例子:
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);
然后将查看绑定到UndeletedItems
而不是
<DataGrid ItemsSource="{Binding UndeletedItems}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Name}"/>
</DataGrid.Columns>
</DataGrid>
这将隐藏已删除的项目,同时仍支持CRUD操作。
希望这有帮助