2009-04-23 67 views
0

我有基本上希望成为用于配电网络的单线图设计师一个MVVM WPF应用程序的画布。MVVM与用户控件

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

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

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

有关如何进行任何暗示,我已经看过很多DiagramCanvas的例子,但所有这些使用的简单物件最喜欢简单的矩形...

回答

0

莫罗,

一个很好的办法可以使ItemsControl的ItemsPanel a Canvas并将DataTemplate中的UI元素坐标绑定到ViewModel的属性。

虽然在我看来,这可能无法工作,因为DataTemplate中的内容将不会被放置在画布上,但里面ItemPresenter。因此,也许你可以通过基于定义元素类型的属性在触发器中切换模板来控制可视化任何元素。

然后,你可以绑定帆布的儿童对这些控件的集合,或代码隐藏在程序上填充Canvas.Children集合。

+0

最后一句是我正在努力解决。 Canvas对象的儿童属性似乎不可绑定,并且解决代码隐藏中的集合更改似乎很乏味。 有一种方法可以为每个元素使用usercontrol? – 2009-04-24 18:41:26

0

我即将类似的东西。我有Itemscontrol作为帆布铺设。我的项目是ShapeItemViewModels,它具有来自Type Usercontrol的属性PayLoad。 我的视图有一个边界和一个ContentPresenter,它绑定到我的Property Payload。 然后根据我的需要注入我的有效负载。 这让我组装我的项目,我想......我 一个有问题,但...这是连接/关系 看到我的线程在这里:

Diagramming in Silverlight MVVM- connecting shapes