Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 画布中带有用户控件的MVVM_Wpf_Mvvm_Canvas - Fatal编程技术网

Wpf 画布中带有用户控件的MVVM

Wpf 画布中带有用户控件的MVVM,wpf,mvvm,canvas,Wpf,Mvvm,Canvas,我有一个MVVM WPF应用程序,它基本上希望成为配电网的单线图设计器 我有一个画布,必须包含变压器,断路器,线路和电缆 我最大的问题是设计。。。我怎么开始 我想到一个DesignerView,DesignerViewModel,它包含一个IDesignerItemViewModel的ObservableCollection,它是我所有元素的基类。但在这种情况下,我必须使用ItemsControl将画布的内容绑定到我的集合,但优点是我不必为每个元素创建usercontrol,但我将解决DataT

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

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

我最大的问题是设计。。。我怎么开始

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

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

Mauro

一种很好的方法是将ItemsControl的ItemsPanel设置为画布,并将DataTemplate中的UI元素坐标绑定到ViewModel的属性

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


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

我将介绍类似的内容。我有Itemscontrol,它以画布的形式显示。我的项目是ShapeItemViewModels,它的属性负载来自Usercontrol类型。 我的视图有一个边框和一个ContentPresenter,它绑定到我的属性负载。 然后根据需要注入有效负载。 这使我可以组装我的项目,因为我想。。。 但是我有一个问题。。。这就是联系/关系 在这里查看我的帖子:


最后一句是我想解决的问题。Canvas对象的Children属性似乎是不可绑定的,在代码隐藏中解决集合更改似乎很乏味。。有一种方法可以对每个元素使用usercontrol吗?