Rel*_*ity 9 wpf mvvm inotifycollectionchanged
我有2个列表视图...并在它们之间添加/删除按钮.
在viewmodel中收集更改了list-view-collection的事件时,我可以回滚特定条件的更改吗?
您可以处理备份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)
| 归档时间: |
|
| 查看次数: |
2885 次 |
| 最近记录: |