【发布时间】:2014-04-19 16:48:38
【问题描述】:
这一定是个愚蠢的问题,但我找不到答案。我的应用程序中有一个带有 Viewmodel 的 MainWindow 和带有相应 viewmodel 的子视图。我需要从子视图模型执行主窗口视图模型上定义的命令。我读到我需要使用 IoC 并在创建子视图时传递 mainWindow 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 视图模型的引用以传入“???”范围?
另外:这会破坏 mvvm 模式吗?因为子视图知道主窗口视图模型的存在。
谢谢!
更新
我尝试将此作为 EventAggregator 类:
class EventAggregator
{
public static void BroadCast(string message)
{
if (OnMessageTransmitted != null)
OnMessageTransmitted(message);
}
public static Action<string> OnMessageTransmitted;
}
但我不喜欢静态的想法,这意味着所有应用程序都是通用的。也许我可以将其设置为特定视图模型的本地,但我如何为子视图订阅此事件?谢谢
【问题讨论】:
-
创建
ViewClientes的重载构造函数,接受viewModel 作为参数。理想情况下,您应该使用一些 Mediator 模式或 EventAggregator,以便两个 ViewModel 保持松散耦合。 -
谢谢?你能举一个 EventAggregator 的基本例子吗?请看我的更新!谢谢!