从另一个类库中的ViewModel关闭窗口

时间:2018-08-13 20:03:35

标签: c# wpf mvvm

我有MVVM,其中VM在单独的ClassLibrary项目中。我需要实现关闭窗口。 我看到的所有解决方案都涉及直接传递窗口。问题在于类库不知道System.Windows.Window的类型,即使我可以将表单作为对象传递,也无法在其上调用Close方法。

我该怎么办?是否有针对类库的解决方案?

1 个答案:

答案 0 :(得分:2)

一种解决方案是在定义视图模型的类库中定义一个接口:

public interface IWindow
{
    void Close();
}

在WPF应用程序的窗口类中实现此接口:

public partial class MainWindow : Window, IWindow { ... }

您可以将IWindow引用传递给视图模型,而不是传递System.Windows.Window引用。然后,视图模型只知道可以在单元测试中轻松模拟的接口。

您可能还需要考虑使用窗口服务来打开和关闭窗口。请以我对以下问题的回答为例:

MVVM show new window from VM when seperated projects