没关系......发现它......也明白为什么......
我查看了WPF,并覆盖了WPF窗口的OnClosing以防止在任何条件下关闭窗口......例如在允许窗口关闭之前编辑并获取用户确认。之前做了很多次,但是在C#WinForms下。
在WPF中,我有我的VMMV,并且ViewModel被设置为WPF窗口的“DataContext”,没问题......所有字段都绑定,刷新,根据需要启用/禁用等等。一旦我点击关闭按钮,已被覆盖的“OnClosing”进入我的功能,并要求确认关闭或不...没有什么特别的。如果没问题,请继续。如果不是,我设置e.Cancel = true(中止关闭窗口)。
public void ViewModelClosing(object sender, CancelEventArgs e)
{
if (MessageBox.Show("Close the current window?", "Close",
MessageBoxButton.OKCancel) == MessageBoxResult.Cancel)
// Nope, do not allow the window to close, so "CANCEL" the close window operation
e.Cancel = true;
}
但是,当我发送OnClosing函数时,SOON已经完成,Window的“DataContext”也消失了,所有相应的“Bindings”也都消失了。我错过了一些简单的东西吗?
---编辑--- 糟糕,澄清。我没有使用任何特定的框架,而是我自己的具有属性和ICommands的类。上面的函数从Window的OnClosing钩子调用到事件列表中不起作用......
OnClosing += myViewModel.ViewModelClosing;
但奇怪的是,如果我直接将窗口覆盖(它不会破坏绑定)
protected override void OnClosing(CancelEventArgs e)
{
if( MessageBox.Show( "Ok to close", "Closing", MessageBoxButton.YesNo )
== MessageBoxResult.No )
e.Cancel = true;
}
答案 0 :(得分:2)
我同意hyp。 WPF中的任何内容都不会自动清除DataContext。您可能正在使用一些MVVM Framework来帮助您防止内存泄漏,但显然是过于热心。