【发布时间】:2010-05-05 07:53:25
【问题描述】:
我有控制权
类 DragGrid : 网格 { ... }
继承自原始网格并允许拖动和调整其子元素的大小。
我需要将一个名为 WorkItemsProperty 的自定义 DP 绑定到一个类型为 WorkItem 的可观察集合(实现 INotifyPropertyChanged)。网格中的每个元素都绑定到一个集合项。
每当用户在运行时动态添加一个新项目(这些项目不能在 XAML 中声明!),或从该集合中删除一个项目,DragGrid 上的WorkItems DP 应该更新,并且网格中的子项(其中每个孩子代表一个WorkItem 集合项)。
我的问题是 DP 如何通知控件网格中的哪个子元素必须删除、更改(“更改”表示用户拖动了一个元素,或者用鼠标调整它的大小)或添加,以及我如何确定哪个现有的孩子是需要删除或更改的孩子。
我知道这是 DependencyPropertyChangedCallback 出现的地方。但是只有在重新设置 DP 属性时才会调用它,而不是当集合内的某些内容发生更改时(如添加、删除项目)。那么最后,DragGrid 控件是否需要以某种方式订阅 CollectionChanged 事件?在什么时候我会为此连接事件处理程序?
*编辑:: 首先使用 Grid 的原因是因为我希望能够在用户拖动或调整 Grid 中的控件大小时保持最小增量。一个控件代表一个时间跨度,每个网格列代表15分钟(这是最小值)。在 Canvas with Thumbs 中执行此操作既困难又麻烦。实现 DragGrid 解决了我的用户交互问题。此外,Canvas 不可扩展,因此必须始终重新计算时间跨度。使用网格,我没有问题,因为无论大小,列都会告诉我时间。**
【问题讨论】:
标签: c# wpf data-binding observablecollection dependency-properties