我有 2 个列表视图...并在它们之间添加/删除按钮。
在视图模型中列表视图集合的集合更改事件中,我可以回滚特定条件的更改吗?
你可以处理CollectionChanged http://msdn.microsoft.com/en-us/library/ms653375.aspx事件的ObservableCollection
备份(通过虚拟机或其他方式)旧值(请参阅NotifyCollectionChangedEventArgs.OldItems http://msdn.microsoft.com/en-us/library/system.collections.specialized.notifycollectionchangedeventargs.olditems.aspx属性)并在需要时取回它们,即当用户单击“撤消”等时。
Update参考以下评论:
如果您确实想从内部回滚集合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;
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)