0

我不清楚是谁在 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 模式的重要内容。

4

1 回答 1

1

为此,您必须修改您的 Window 以具有 bool 类型的依赖属性,如CanSave将绑定到您的 ViewModel(此属性将说明是否有任何待处理的更改)。现在,如果CanSave,您将向用户显示 DialogBox上面写着“你想保存挂起的更改”,如果用户单击是触发与保存按钮相同的命令,如果用户单击,只需关闭窗口。如果CanSave,只需关闭窗口。我希望这会给你一个想法。

另一种方法是自定义窗口关闭按钮并通过命令将其绑定到 ViewModel 并从那里处理它。

于 2012-11-19T08:49:09.823 回答