动画添加/删除TreeView中的项目 - WPF

时间:2011-05-18 01:06:04

标签: c# wpf animation mvvm items

我知道在ItemControl中设置动画项目时会遇到类似的问题,所以如果已经发布了可接受的答案,那么如果能指向正确的方向,那就太棒了。

我有一个数据绑定TreeView,其中层次结构只有一层深度。它可以有X个根节点和X个子节点。然而,这是深刻的。我面临的问题是如何动画添加/移动/删除数据绑定集合中的项目。

TreeView的ItemContainerStyle设置为自定义ControlTemplate,以提供MouseOver和Selected样式。然后我使用HierarchialDataTemplate进一步布局绑定到它的不同类型的Item。

我找到了许多示例,演示如何动画扩展项目,但在添加/移动/移除项目时动画方面不是很多。一个例子发现here  几乎显示了我所追求的内容,但是包含了许多代码和库引用,换句话说我认为这些引用是无关紧要的。我不反对合并我自己的类似功能版本。我只是希望我可以挂钩事件触发器或等效物来实现相同的目标。

我没有发布任何示例代码,因为我对任何解决方案都非常开放,并且没有编写任何“无法正常工作”并需要修复的内容。我或多或少都在寻找从哪里开始的意见。正在应用的动画类型也无关紧要,因为只要我知道如何动画添加/移动/删除,我就可以修改和更改代码以适应我的偏好和整体最终效果。

1 个答案:

答案 0 :(得分:2)

因为我认为你在问“我应该怎样解决这个问题?”我可以给你一些建议。

您手头有两个基本问题:

  • 你想要实现的效果的机制
  • 将这种效果连接到您的程序架构

对于第一个问题,我建议使用简单的非MVVM应用程序对效果进行原型设计。特别是,您可以使用您引用的链接中的VisualStateManager想法和您已熟悉的Animation概念以及没有复杂库的良好旧式代码隐藏来获取树插入,移动和删除效果工作。请记住,您将尝试在以后删除所有代码隐藏,并且这仅用于原型设计。基本上,您将该链接移植到代码隐藏并删除它所使用的任何内容。

一旦你获得了你想要达到的效果,现在你有了一个古老的MVVM问题,它使你的视图模型与“松散耦合”一起工作。 WPF使数据绑定属性变得简单,因此MVVM是全世界的MVVM数据。但是对于操作来说,干净地将事件连接到操作有很多很多障碍,而且每个MVVM框架似乎都有不同的做法。 MVVMLight有EventToCommandSystem.Windows.InteractivityCallMethodAction,它会一直持续。

因此,要将您的效果与您选择的MVVM框架集成,请使用该框架的机制将事件连接到操作,无论是什么。但是,如果您找不到另一种方法来使胶水工作,您可以始终使用一些代码隐藏来处理您的视图或将事件直接发送到您的视图模型。这取决于你。