谁负责MVVM模式中的Window View生命周期?

时间:2012-11-19 08:03:26

标签: wpf mvvm

我不清楚是谁在WPF中创建和处理窗口。
我们知道可以通过单击右上角的十字标志来关闭窗口,我们只能通过在关闭事件处理程序中设置Cancel = true来停止关闭。
对我来说,ViewModel决定是否允许关闭是很自然的。而且我认为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();
}

因此,我们的VM通过绑定与视图进行通信,并通过IViewManager间接进行通信。 在MVVM应用程序的示例中,我到目前为止看到VM非常被动,并不对View的生命周期负责。这就是为什么我对我们的设计有些怀疑。
我不确定我们是否错过了一些关于MVVM模式的重要内容。

1 个答案:

答案 0 :(得分:1)

为此你必须修改你的窗口以使bool类型的Depedency Property像 CanSave 一样绑定到你的ViewModel(这个属性会说明是否有任何挂起的更改)。现在如果 CanSave true ,您将向用户显示一个DialogBox,其中显示“您要保存待处理的更改”,如果用户点击触发与保存按钮相同的命令,如果用户点击只需关闭窗口。如果 CanSave false 只需关闭窗口。我希望这会给你一个想法。

另一种方法是Make Window Close Button Custom并通过Command将它绑定到ViewModel并从那里处理它。