C# 如何从WPF MVVM中的多个ViewModels向MainView的画布添加UserControl

C# 如何从WPF MVVM中的多个ViewModels向MainView的画布添加UserControl,c#,wpf,mvvm,view,viewmodel,C#,Wpf,Mvvm,View,Viewmodel,我有一个带有画布的MainWindowView(窗口),我在其中添加了视图(用户控件) 主窗口中的画布是从画布派生的自定义画布,因此可以将其中的视图四处移动,并可以带出front或sendback 我通过将命令绑定到按钮,将视图添加到MainWindowView的画布。因此,当我单击一个按钮时,会在画布中添加一个视图 但是,我的问题是,我想从已经在MainViewModel画布中的视图的ViewModel向同一个MainViewModel画布添加另一个视图 由于用于绑定画布的Observable

我有一个带有画布的MainWindowView(窗口),我在其中添加了视图(用户控件)

主窗口中的画布是从画布派生的自定义画布,因此可以将其中的视图四处移动,并可以带出front或sendback

我通过将命令绑定到按钮,将视图添加到MainWindowView的画布。因此,当我单击一个按钮时,会在画布中添加一个视图

但是,我的问题是,我想从已经在MainViewModel画布中的视图的ViewModel向同一个MainViewModel画布添加另一个视图

由于用于绑定画布的ObservableCollection位于MainViewModel中,因此我只能从MainViewModel添加视图

当我尝试从其他ViewModel使用MainViewModel时,我必须创建它的新对象,这会使画布中的旧视图被新视图替换

有没有解决办法。如果没有,那么使用MVVM框架有什么用呢。
请帮助…

使用Calibrum Micro,这将在这方面帮助您

我是否正确:您的控件的数据上下文与窗口的数据上下文不同,您需要从那里访问它

基本上,通过设计可以避免这种情况(使用依赖项注入将MainViewModel实例引入命令),但实际上有一种WPF/MVVM友好的解决方法:

使用命令将控件添加到MainViewModels ObservableCollection

<Button Command="{Binding Path=CreateViewCommand}" CommandParameter="{Binding}" />

从控件(您称之为视图)中,必须使用祖先绑定:

<Button Command="{Binding Path=DataContext.CreateViewCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}"
    CommandParameter="{Binding Path=DataContext, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}"/>


在命令中,可以将参数强制转换为其原始类型(MainViewModel),并根据需要使用它。

是否使用框架?不能在标记之间添加子控件吗?或者你是在问绑定?有很多ChildControl和用户通过点击按钮来决定它们,所以我必须动态添加。你能添加一些描述吗?我想不出哪一个是问题,我已经更新了问题,以便更好地描述。如果您需要更多,请让我知道。您有一个类似于我的问题,您有一个ViewModel和ViewModel为每个添加的孩子,您可以看到我的解决方案,但有一个缺点是不完全是MVVM