【问题标题】:canceling remove action - NotifyCollectionChangedAction取消删除操作 - NotifyCollectionChangedAction
【发布时间】:2010-08-06 21:57:10
【问题描述】:

我在我的视图模型中使用以下代码从集合中删除项目:

UnitMeasureCollection.CollectionChanged += new NotifyCollectionChangedEventHandler(ListOfUnitMeasureCollectionChanged);

void ListOfUnitMeasureCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
    if (e.Action == NotifyCollectionChangedAction.Remove)
    {
        if (NavigationActions.DeleteConfirmation("Delete Item.", "Are you sure you want to delete this item? This action cannot be undone."))
        {
            foreach (UnitMeasureBO item in e.OldItems)
            {
                UnitMeasureBO unitMeasureBO = item as UnitMeasureBO;
                bool inUse = unitMeasureRepository.UnitMeasureInUse(unitMeasureBO.UnitMeasureValue);
                if (inUse == true)
                {
                    NavigationActions.ShowError("Cannot delete item", "This item cannot be deleted because it is used elsewhere in the application.");
                }
                else
                {
                    unitMeasureRepository.DeleteUnitMeasure(unitMeasureBO.UnitMeasureValue);
                }
            }
        }
    }
}

我有一个绑定到集合的数据网格。我想知道是否有根据确认提示取消删除操作?我注意到 NotifyCollectionChangedEventArgs 没有取消方法。发生的情况是,当用户从数据网格中删除一个项目但在确认时选择“否”时,该项目仍会从数据网格中删除。它不会从数据库中删除,如果刷新数据网格,它将再次出现。我正在使用 mvvm 模式,我更喜欢这样做,而不必编写我的数据网格。任何帮助表示赞赏。

【问题讨论】:

    标签: wpf mvvm datagrid inotifycollectionchanged


    【解决方案1】:

    好吧,您不能在 CollectionChanged 事件期间取消删除操作。

    我的建议:如果您使用的是 MVVM,您应该在某个地方有一个 DeleteCommand,当在 DataGrid 中按下 DeleteKey 时会触发该命令。在此命令的 Execute() 方法中,您应该:

    1. 要求确认。
    2. 如果用户选择是,则从集合中删除该项目。此删除应直接反映在 DataGrid 上。
    3. 如果用户选择否,则什么也不做。

    这意味着,尽管 DataGrid.CanUserDeleteRows 设置为 False,因为您基本上必须控制何时删除行。

    希望这会有所帮助。

    【讨论】:

    • 我就是这么想的。我喜欢你关于删除命令的想法。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多