C# 主窗口视图子视图中的模型引用

C# 主窗口视图子视图中的模型引用,c#,wpf,mvvm,C#,Wpf,Mvvm,这一定是个愚蠢的问题,但我找不到答案。我的应用程序中有一个带有Viewmodel的主窗口和带有相应Viewmodel的ChildView。我需要从子viewmodel执行在mainWindow viewmodel上定义的命令。我读到在创建子视图时需要使用IoC并传递主窗口ViewModel的引用,但我不知道如何! 在子viewmodel构造函数上,我有以下内容: private readonly Main_ViewModel _mainVM; public VM_ListadoClientes(

这一定是个愚蠢的问题,但我找不到答案。我的应用程序中有一个带有Viewmodel的主窗口和带有相应Viewmodel的ChildView。我需要从子viewmodel执行在mainWindow viewmodel上定义的命令。我读到在创建子视图时需要使用IoC并传递主窗口ViewModel的引用,但我不知道如何! 在子viewmodel构造函数上,我有以下内容:

private readonly Main_ViewModel _mainVM;
public VM_ListadoClientes(Main_ViewModel MainVM)
    {
        _mainVM = MainVM;
    }        
private VM_ListadoClientes viewModel = new VM_ListadoClientes(???);

    public ViewClientes()
    {
        InitializeComponent();
        this.Loaded += (s, e) => { this.DataContext = this.viewModel; };  
    }
在隐藏的子视图代码中,我有以下内容:

private readonly Main_ViewModel _mainVM;
public VM_ListadoClientes(Main_ViewModel MainVM)
    {
        _mainVM = MainVM;
    }        
private VM_ListadoClientes viewModel = new VM_ListadoClientes(???);

    public ViewClientes()
    {
        InitializeComponent();
        this.Loaded += (s, e) => { this.DataContext = this.viewModel; };  
    }
那么,如何获得要传入的对mainWindow viewmodel的引用???参数

还有:这会打破mvvm模式吗?因为子视图知道mainwindow viewmodel存在

谢谢大家!

更新

我尝试将此作为EventAggregator类:

class EventAggregator
{
    public static void BroadCast(string message)            
    {
        if (OnMessageTransmitted != null)
            OnMessageTransmitted(message);
    }

    public static Action<string> OnMessageTransmitted;        
}

但我不喜欢静态的想法,这意味着它对所有应用程序都是通用的。也许我可以将其设置为特定viewModel的本地视图,但如何订阅此事件的子视图?感谢

< P>我认为消息、事件聚合器等是黑客行为,它们会使你的应用程序变得难以管理。为什么不使用固溶体?我建议使用,并将尝试给你一些原因

1它提供了一个类,您可以在其中使用输入手势注册应用程序范围的命令。这允许您像这样绑定xaml:

<Button Command="{catel:CommandManagerBinding File.Exit}" />
然后,您可以在任何需要的地方实现该命令,并通过服务将其传递给正确的VM

2具有独立的视图模型处理的坚实基础。


3简单地提供了使用MVVM和XAML时应用程序中所需的一切。

创建接受viewModel作为参数的ViewClients重载构造函数。理想情况下,您应该使用一些中介模式或EventAggregator,以便两个视图模型保持松散耦合。谢谢?您能给出一个EventAggregator的基本示例吗?请看我的更新!谢谢为什么要创建EventAggregator?PRISM已经定义了它。请参阅示例,然后单击。