2010-06-28 7 views
1

Я выяснил, как закрыть окно из моего ViewModel.WPF MVVM вызов ViewModel Сохранить метод в окне Закрыть

Теперь мне нужно решить проблему закрытия окна с другой стороны.

Мне нужно вызвать метод Save() в моей ViewModel, когда пользователь нажимает кнопку закрытия окна.

Я думал о привязке свойства Command к событию закрытия Window, но моя ViewModel связана с пользовательским элементом управления, и в этом случае команда Close не будет выполнена.

Я тоже смотрел на этот вопрос Disposing WPF User Controls, но я боюсь, что вызов метода Save метода метода Dispose немного запоздал.

Есть ли способ решить эту проблему?

Большое спасибо!

ответ

1

Я думаю, что лучшим решением для этого было бы зарегистрировать ViewModel в случае вашего контроля, который также зарегистрирован в закрытом событии вашего окна. Таким образом, вы также можете зарегистрировать другие ViewModels в окнеClosed Event в будущем, чтобы поднять другие методы save() в других моделях ViewModels.

+0

Это сработало для меня .... Спасибо :) –

3

Если вам всегда нужно сэкономить на закрытии, почему бы не вызвать метод Save() из Close()) в ViewModel вместо представления? Затем просто убедитесь, что окно закрывается только из ViewModel, а не из самого представления. Что-то вроде (непроверено, но вы поняли)

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(); 
    } 
} 

Смежные вопросы