gpt4 book ai didi

wpf - 我可以在集合更改事件上回滚集合更改吗?

转载 作者:行者123 更新时间:2023-12-04 04:19:24 25 4
gpt4 key购买 nike

我有2个 ListView ...并在它们之间添加/删除按钮。

在viewmodel中的list-view-collection的collection change事件中,我可以回滚针对特定条件的更改吗?

最佳答案

您可以处理CollectionChanged ObservableCollection 事件以备份(通过VM或其他方式)旧值(请参见 NotifyCollectionChangedEventArgs.OldItems 属性),并在需要时(例如,当用户单击“撤消”等时)将其取回。

更新关于下面的评论:

如果您确实想从CollectionChanged事件处理程序中回滚集合,请创建一个标志,在该标志中从递归调用中退出处理程序(未经多线程应用程序测试),这是一个简单的示例,您可以轻松地对其进行调整适合您的V/VM。

private void Window_Loaded(object sender, RoutedEventArgs e)
{
var x = new ObservableCollection<string>();
x.CollectionChanged +=
new NotifyCollectionChangedEventHandler(x_CollectionChanged);
x.Add("asdf");
x.Remove("asdf");
}

bool rollingBack = false;
void x_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
if (rollingBack) return;

if (e.Action == NotifyCollectionChangedAction.Remove)
{
if (e.OldItems.Contains("asdf"))
{
var oc = (ObservableCollection<string>)sender;
rollingBack = true;
oc.Add("asdf");
rollingBack = false;
}
}
}

关于wpf - 我可以在集合更改事件上回滚集合更改吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4530843/

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