【问题标题】:Draw or create databound UserControls dynamically at runtime in WPF在 WPF 中在运行时动态绘制或创建数据绑定用户控件
【发布时间】:2010-03-31 13:04:39
【问题描述】:

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

“条形”用户控件有一个名为“ProjectProperty”的依赖属性,负责在画布上绘制和定位条形。

但是当用户在 Canvas 上绘制一个新栏时需要发生什么?它必须以某种方式进行数据绑定,但这需要在什么时间点发生,我该怎么做?

我了解 Canvas 上的每个“条形”用户控件都是数据绑定的,仅仅是因为它们已经存在于数据源中。

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

谢谢!

【问题讨论】:

  • 你能展示你的 XAML 和数据结构吗?我不确定您所说的向数据源“添加”左侧位置和宽度是什么意思。还是您的意思是“设置”?如果绑定是在 XAML 中定义的,那么您只需将新的 Bar Control 添加到源集合中即可。

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


【解决方案1】:

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

在我看来,定期这样做的好处是,只有一条通过代码的路径可以添加新项目(直接到数据源),这减少了代码路径和潜在的错误/维护问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-12
    • 1970-01-01
    相关资源
    最近更新 更多