c# - WPF:从 viewModel 调用 View 中的方法

标签 c# wpf architecture mvvm wpf-controls

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

执行此操作的函数位于控件本身(SaveLayout、RestoreLayout)上。

正确的做法是什么?

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

但是如果一些较低级别的 View 和 View 模型必须这样做,我将如何处理这个问题?如果使用这种方法,我仍然必须在应用程序级别创建命令并将其通过 viewModels 发送到需要绑定(bind)到的位置?在其中,我必须搜索作为 View 的用户控件,然后搜索其中的 avalonDock 控件,并在应用程序级别使用它,这很容易出错。不知怎的,它看起来很脏......

谢谢!

最佳答案

您可以引入接口(interface)IView,以便ViewModel 可以调用View 上的方法。这样 ViewModel 就不需要知 Prop 体的 View 类,仍然可以进行单元测试。

WPF Application Framework (WAF) 的示例应用程序展示了这是如何实现的。 .

关于c# - WPF:从 viewModel 调用 View 中的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6393649/

相关文章:

c# - 从 bool 值检索值失败

c# - 是否可以使用非特殊文件夹作为 FolderBrowserDialog 的根文件夹?

oop - 内聚力和耦合之间的区别

architecture - virtio、emulated-IO、direct I/O、I/O passthrough、SR-IOV 有什么区别?

c# - 为什么无法覆盖 getter-only 属性并添加 setter?

c# - 如何处理这个 JSON 数据?

c# - 在 app.config 中引用程序集

.net - XAML 中的程序集别名

java - 安卓好的架构

c# - EF 和 Linq 除了