我有MVVM,其中VM在单独的ClassLibrary项目中。我需要实现关闭窗口。
我看到的所有解决方案都涉及直接传递窗口。问题在于类库不知道System.Windows.Window
的类型,即使我可以将表单作为对象传递,也无法在其上调用Close
方法。
我该怎么办?是否有针对类库的解决方案?
答案 0 :(得分:2)
一种解决方案是在定义视图模型的类库中定义一个接口:
public interface IWindow
{
void Close();
}
在WPF应用程序的窗口类中实现此接口:
public partial class MainWindow : Window, IWindow { ... }
您可以将IWindow
引用传递给视图模型,而不是传递System.Windows.Window
引用。然后,视图模型只知道可以在单元测试中轻松模拟的接口。
您可能还需要考虑使用窗口服务来打开和关闭窗口。请以我对以下问题的回答为例: