WPF如何通知可观察集合中的多个项目已被大量修改

时间:2013-02-01 05:16:52

标签: wpf xaml

使用名为“MultiSelectTreeView”的自定义WPF控件,该控件继承自System.Windows.Controls.TreeView。其目的是允许多选和拖放。

包含此MultiSelectTreeView控件的视图的xaml绑定由基础视图模型公开的ObservableCollection。

拖放操作可能涉及ObservableCollection上的许多删除/添加(或移动)操作,但是我需要将单个拖放操作的所有操作封装到命令对象中以支持拖放作为单个原子操作的撤消/重做。

当我挂钩到ViewModel.ObservableCollection的CollectionChanged事件时,会触发多个事件,并且从ViewModel的角度来看,无法知道任何特定的添加/删除/移动事件是否将独立存在或是否将成为其中的一部分一系列事件,都与单个用户拖放有关。

我可以想象各种不稳定的解决方案,比如给MultiSelectTreeView控件提供对其底层ViewModel的可能的结构的各种深入了解(暂时取消ObservableCollection的CollectionChanged事件),但是感觉不对。

也许我应该创建我自己的ObservableCollection后代,它支持一个只触发一个事件的.MoveRange()方法,或者那些沿着这些线的东西。

我确信拥有超过几周WPF经验的人可能会提出比这些更好的解决方案。

1 个答案:

答案 0 :(得分:0)

我不确定这是否会对你有所帮助,但我今天就碰到了它。

Batch Updates with INotifyCollectionChanged