我正在尝试在WPF中创建时间跟踪应用程序。用户应该将表示时间跨度(timespan = bar)的元素绘制到Canvas上。 现在,当它们被数据绑定到一个集合时,会添加现有的条形图(每个集合项目包含画布上条形图的宽度和左侧位置)。
'bar'Usercontrol有一个名为“ProjectProperty”的依赖项属性,它负责在画布上绘制和定位条形。
但是当用户在画布上绘制新栏时需要发生什么?它必须以某种方式进行数据绑定,但在什么时候需要发生这种情况,我将如何做到这一点?
据我所知,Canvas上的每个'bar'UserControls都是数据绑定的,因为它们已经存在于数据源中。
假设用户开始在mousedown上绘制栏并在mouseup上完成,我是否必须以编程方式将其左侧位置和宽度添加到绑定数据源?如果没有,数据源将如何更新?
谢谢!
答案 0 :(得分:0)
将View绑定到ViewModel,Model或Collection时我采用的一般方法是从模型/集合中驱动所有更改 - 因此视图纯粹是在监听并反映它所绑定的内容。因此,虽然您要跟踪鼠标事件以捕获条形图的位置和大小(并且可能在用户绘制时绘制预览),但是当用户完成绘图操作时,您应该将新项目添加到基础集合中让泡沫升级到View。
我认为通常这样做的回报是,只有一条路径通过代码添加新项目(直接添加到数据源),这减少了代码路径和错误/维护难题的可能性。