在WPF中在运行时动态绘制或创建数据绑定UserControls

时间:2010-03-31 13:04:40

标签: c# .net wpf binding dependency-properties

我正在尝试在WPF中创建时间跟踪应用程序。用户应该将表示时间跨度(timespan = bar)的元素绘制到Canvas上。 现在,当它们被数据绑定到一个集合时,会添加现有的条形图(每个集合项目包含画布上条形图的宽度和左侧位置)。

'bar'Usercontrol有一个名为“ProjectProperty”的依赖项属性,它负责在画布上绘制和定位条形。

但是当用户在画布上绘制新栏时需要发生什么?它必须以某种方式进行数据绑定,但在什么时候需要发生这种情况,我将如何做到这一点?

据我所知,Canvas上的每个'bar'UserControls都是数据绑定的,因为它们已经存在于数据源中。

假设用户开始在mousedown上绘制栏并在mouseup上完成,我是否必须以编程方式将其左侧位置和宽度添加到绑定数据源?如果没有,数据源将如何更新?

谢谢!

1 个答案:

答案 0 :(得分:0)

将View绑定到ViewModel,Model或Collection时我采用的一般方法是从模型/集合中驱动所有更改 - 因此视图纯粹是在监听并反映它所绑定的内容。因此,虽然您要跟踪鼠标事件以捕获条形图的位置和大小(并且可能在用户绘制时绘制预览),但是当用户完成绘图操作时,您应该将新项目添加到基础集合中让泡沫升级到View。

我认为通常这样做的回报是,只有一条路径通过代码添加新项目(直接添加到数据源),这减少了代码路径和错误/维护难题的可能性。