我已经想出如何从我的ViewModel关闭Window。
现在我需要解决另一方面的窗口关闭问题。
当用户单击窗口的关闭按钮时,我需要在我的ViewModel中触发Save()方法。
我在考虑将Command属性绑定到Window的close事件,但我的ViewModel与用户控件有关,在这种情况下,不会执行Close命令。
我也在考虑这个问题Disposing WPF User Controls,但我担心在Dispose方法中调用Save方法有点太晚了。
有什么方法可以解决这个问题吗?
非常感谢你!
答案 0 :(得分:3)
如果您总是需要在结束时保存,为什么不从ViewModel中的Close()方法而不是View中调用Save()方法?然后确保窗口仅从ViewModel关闭,而不是从View本身关闭。像(未经测试,但你明白了)
public class SaveOnCloseViewModel
{
public event Action RequestClose;
...
public void Close()
{
Save();
RequestClose();
}
}
public class SaveOnCloseView
{
private SaveOnCloseViewModel _vm;
public SaveOnCloseView(SaveOnCloseViewModel vm)
{
_vm = vm;
_vm.RequestClose += this.PerformClose;
this.OnClosing += Window_Closing;
}
private bool _isClosing = false;
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
if (!_isClosing)
{
e.Cancel = true;
_vm.Close();
}
}
private void PerformClose()
{
_isClosing = true;
this.Close();
}
}
答案 1 :(得分:1)
我认为最好的解决方案是在您控制的事件中注册ViewModel,该事件也会在您关闭的窗口事件中注册。这样你也可以在windowClosed Event中注册其他ViewModel,以便在其他ViewModels中引发其他save()方法