IEditableCollectionView用于过滤掉已删除的对象

时间:2013-10-15 17:36:03

标签: wpf data-binding crud

我正在使用我自己派生的ObservableCollection来实现ICollectionViewFactory,以允许我在其上创建自己的IEditableCollectionView。视图的(主要)目的是允许过滤掉标记为“已删除”的对象,以便这些记录不会显示给用户,但仍保留在集合中,只要它们未标记为“已接受”即可或者回滚。

我在这里走在正确的轨道上吗?或者这不是IEditableCollectionView的目的?

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

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

1 个答案:

答案 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操作。

希望这有帮助