我有一个控件
class DragGrid : Grid { ... }
继承自原始网格并使其子元素可拖动和调整大小。我需要将名为WorkItemsProperty
的自定义DP绑定到类型为WorkItem
(实现INotifyPropertyChanged
)的可观察集合。网格中的每个元素都绑定到集合项。
每当用户在运行时动态添加新项(无法在XAML中声明项!)或从该集合中删除项时,DragGrid上的WorkItems
DP应更新,并且网格中的子级(其中每个子级表示WorkItem
集合项)。
我的问题是,DP如何通知控件哪个网格中的子元素必须被删除、更改(“更改”意味着用户拖动了一个元素或使用鼠标调整了它的大小)或添加,以及如何确定哪个现有子元素是需要删除或更改的那个。
我理解这就是DependencyPropertyChangedCallback发挥作用的地方。但是它只在设置DP属性时调用,而不是在集合中的某些内容更改(例如添加、删除项)时调用。所以最终,DragGrid
控件是否需要订阅CollectionChanged事件?我应该在什么时候挂钩事件处理程序呢?
*编辑: 首先使用网格的原因是因为我希望能够保持用户拖动或调整网格中控件的最小增量。一个控件代表一个时间段,每个网格列表示15分钟(这是最小值)。在Canvas中使用Thumbs实现这一点很困难且容易出错。实现DragGrid解决了我的用户交互问题。而且,Canvas不可扩展,所以时间跨度必须一直重新计算。使用网格,我没有这个问题,因为列告诉我时间,无论大小如何。