gpt4 book ai didi

wpf - 取消删除操作 - NotifyCollectionChangedAction

转载 作者:行者123 更新时间:2023-12-01 11:07:56 25 4
gpt4 key购买 nike

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

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);
}
}
}
}
}

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

最佳答案

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

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

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

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

希望这对您有所帮助。

关于wpf - 取消删除操作 - NotifyCollectionChangedAction,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3428092/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com