WPF MVVM在窗口关闭时调用ViewModel的Save方法。

25 浏览
0 Comments

WPF MVVM在窗口关闭时调用ViewModel的Save方法。

我已经想出如何从我的ViewModel中关闭窗口了。

现在,我需要解决从其他方面关闭窗口的问题。

当用户点击窗口的关闭按钮时,我需要触发我的ViewModel中的Save()方法。

我考虑将Command属性绑定到Window的close事件,但是我的ViewModel与用户控件相关联,在这种情况下,Close命令将不会被执行。

我也看了这个问题Disposing WPF User Controls,但我担心在Dispose方法中放置Save方法调用会有点太迟了。

有没有办法解决这个问题?

非常感谢!

admin 更改状态以发布 2023年5月23日
0
0 Comments

我认为最好的解决方法是在您的控件的事件中注册ViewModel,该控件也在窗口关闭事件中注册。这样,您也可以在将来的windowClosed事件中注册其他ViewModel,以引发其他ViewModel中的save()方法。

0
0 Comments

如果您总是需要在关闭时保存,为什么不从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();
    }
}

0