【问题标题】:MVVM in a canvas with usercontrols带有用户控件的画布中的 MVVM
【发布时间】:2009-04-23 13:44:03
【问题描述】:

我有一个 MVVM WPF 应用程序,它基本上想成为配电网络的单线图设计器。

我有一个必须包含变压器、断路器、线路和电缆的画布。

我的大问题是设计......我该如何开始?

我想到了一个 DesignerView,DesignerViewModel 包含 IDesignerItemViewModel 的 ObservableCollection,它是我所有元素的基类。但在这种情况下,我必须使用 ItemsControl 将画布的内容绑定到我的集合,但优点是我不必为每个元素创建用户控件,但我会用 DataTemplate 解决大部分问题(我想) . 每个元素视图模型都包含一个模型的链接,该模型保存在我维护我的逻辑树的存储库中。

关于如何进行的任何提示,我查看了许多 DiagramCanvas 示例,但所有这些示例都使用简单的项目,最像简单的矩形......

【问题讨论】:

    标签: wpf mvvm canvas


    【解决方案1】:

    毛罗,

    一个不错的方法是将 ItemsControl 的 ItemsPanel 设为 Canvas,并将 DataTemplate 中的 UI 元素坐标绑定到 ViewModel 的属性。

    虽然在我看来这可能行不通,因为 DataTemplate 的内容不会放在 Canvas 上,而是放在 ItemPresenter 内。因此,也许您可​​以通过基于定义元素类型的某些属性切换触发器中的模板来创建一个可以可视化任何元素的控件。

    然后您可以将 Canvas 的 Children 绑定到这些控件的集合,或者在代码隐藏中以程序方式填充 Canvas.Children 集合。

    【讨论】:

    • 最后一句话是我要解决的问题。 Canvas 对象的 Children 属性似乎不可绑定,在代码隐藏中解决 Collection 更改似乎很乏味.. 有一种方法可以为每个元素使用 usercontrol?
    【解决方案2】:

    我即将做类似的事情。我有 Itemscontrol,它的布局为 CANVAS。我的项目是 ShapeItemViewModels,它具有来自 Type Usercontrol 的属性 PayLoad。 我的视图有一个边框和一个绑定到我的属性有效负载的 ContentPresenter。 然后我根据我的需要注入我的有效载荷。 这使我可以按照自己的意愿组装物品... 我有一个问题......那就是连接/关系 在这里查看我的主题:

    Diagramming in Silverlight MVVM- connecting shapes

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-29
      • 1970-01-01
      • 2013-10-13
      • 2016-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多