带有usercontrols的画布中的MVVM

时间:2009-04-23 13:44:03

标签: wpf mvvm canvas

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

我的画布必须包含变压器,断路器,线路和电缆。

我的大问题是设计......我怎么能开始?

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

关于如何继续的任何提示,我看过很多DiagramCanvas示例,但所有这些都使用简单的项目,就像简单的矩形...

2 个答案:

答案 0 :(得分:0)

莫罗,

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

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

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

答案 1 :(得分:0)

我即将发生类似事情。我有Itemscontrol作为CANVAS。我的项目是ShapeItemViewModels,它具有属性PayLoad,来自Type Usercontrol。 我的视图有一个Border和一个ContentPresenter,它绑定到我的Property Payload。 然后根据我的需要注入我的有效负载。 这允许我按照我想要的方式组装我的物品...... 我有一个问题,那就是连接/关系 看到我的帖子:

Diagramming in Silverlight MVVM- connecting shapes