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