我不清楚是谁在 WPF 中创建和处理窗口。
我们知道窗口可以通过单击右上角的十字符号来关闭,我们只能通过在 Closing 事件处理程序中设置 Cancel = true 来停止关闭。
对我来说,ViewModel 决定是否允许关闭 View 是很自然的。而且我认为是 VM 要求实例化适当的窗口。
在我们的项目中,我们创建了IViewManager
:
public interface IViewManager
{
void ShowView();
void CloseView();
}
public interface IWindowedViewModel : IDisposable
{
bool IsEnabled {get;set;}
WindowState WindowState {get;set;}
Visibility Visibility {get;set;}
bool IsActive {get;set;}
bool CanBeClosed();
}
所以我们的虚拟机通过绑定和间接地通过IViewManager
. 在迄今为止我所看到的 MVVM 应用程序示例中,VM 非常被动,不负责 View 的生命周期。这就是为什么我对我们的设计有些怀疑。
我不能确定我们没有遗漏一些关于 MVVM 模式的重要内容。