我不清楚是谁在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模式的重要内容。
答案 0 :(得分:1)
为此你必须修改你的窗口以使bool类型的Depedency Property像 CanSave 一样绑定到你的ViewModel(这个属性会说明是否有任何挂起的更改)。现在如果 CanSave true ,您将向用户显示一个DialogBox,其中显示“您要保存待处理的更改”,如果用户点击是触发与保存按钮相同的命令,如果用户点击否只需关闭窗口。如果 CanSave false 只需关闭窗口。我希望这会给你一个想法。
另一种方法是Make Window Close Button Custom并通过Command将它绑定到ViewModel并从那里处理它。