WPF MVVM在窗口关闭时调用ViewModel的Save方法。
WPF MVVM在窗口关闭时调用ViewModel的Save方法。
我已经想出如何从我的ViewModel中关闭窗口了。
现在,我需要解决从其他方面关闭窗口的问题。
当用户点击窗口的关闭按钮时,我需要触发我的ViewModel中的Save()方法。
我考虑将Command属性绑定到Window的close事件,但是我的ViewModel与用户控件相关联,在这种情况下,Close命令将不会被执行。
我也看了这个问题Disposing WPF User Controls,但我担心在Dispose方法中放置Save方法调用会有点太迟了。
有没有办法解决这个问题?
非常感谢!
admin 更改状态以发布 2023年5月23日
如果您总是需要在关闭时保存,为什么不从ViewModel的Close()方法中调用Save()方法,而不是从View中调用?然后只需确保窗口仅从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(); } }