1

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

包含此 MultiSelectTreeView 控件的视图的 xaml 绑定了由底层视图模型公开的 ObservableCollection。

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

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

我可以想象各种不可靠的解决方案,例如让 MultiSelectTreeView 控件深入了解其底层 ViewModel 的可能结构(以暂时解开 ObservableCollection 的 CollectionChanged 事件),但感觉根本不对。

也许我应该创建自己的 ObservableCollection 后代,它支持仅触发一个事件或类似这些事件的 .MoveRange() 方法。

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

4

1 回答 1

0

我不确定这是否会对您有所帮助,但我今天刚刚遇到它。

使用 INotifyCollectionChanged 进行批量更新

于 2013-02-22T20:28:55.590 回答