WPF:从viewModel在View中调用方法

时间:2011-06-18 03:22:23

标签: c# wpf architecture mvvm wpf-controls

我在WPF应用程序中使用AvalonDock,需要保留用户设置的AvalonDock的布局(移动,对接,拆分面板)。

执行此操作的功能在控件本身(SaveLayout,RestoreLayout)。

这样做的正确方法是什么?

现在我在mainWindowViewModel上有一个命令,它在创建窗口视图和viewmodel的实例时由应用程序创建。它基本上使relay命令调用一个匿名方法,该方法在视图控件上调用所需的函数。这是有效的,因为应用程序为它创建了窗口和视图模型。

但是如果某个较低级别的视图和视图模型必须这样做,我将如何处理?如果使用这种方法,我还必须在应用程序级别创建Command并通过viewModels将其发送到需要绑定的位置?在它内部,我必须搜索usercontrol,这是一个视图,然后在其中的avalonDock控件,并在应用程序级别使用它,这是容易出错的。不知何故,它似​​乎很脏......

谢谢!

2 个答案:

答案 0 :(得分:3)

您可以引入一个界面 IView ,以便ViewModel可以在View上调用方法。这样,ViewModel不需要知道具体的View类,仍然可以进行单元测试。

WPF Application Framework (WAF) 的示例应用程序显示了如何实现这一目标。

答案 1 :(得分:1)

您可以使用解耦消息传递在视图模型之间进行通信

http://www.bradcunningham.net/2009/11/decoupled-viewmodel-messaging-part-1.html