我可以回收集合更改事件的集合更改吗?

Rel*_*ity 9 wpf mvvm inotifycollectionchanged

我有2个列表视图...并在它们之间添加/删除按钮.

在viewmodel中收集更改了list-view-collection的事件时,我可以回滚特定条件的更改吗?

Shi*_*mmy 5

您可以处理备份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;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 你是怎么得到这个的?当我尝试这样做时,我得到一个InvalidOperationException"在CollectionChanged事件期间无法更改ObservableCollection." - 我试图允许用户取消删除数据网格中的行 (4认同)