이 마음 ... 그것을 발견 ... 너무 ...여전히 e.Cancel이 = 사실
내가 WPF에 주위를 둘러 보았다 한 이유를보고, 안해도의 DataContext를 지 웁니다 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 기능이 완료되면 전송로, 윈도우의 "의 DataContext는"사라, 그래서 너무 모든 각각의 "바인딩"입니다. 나는 간단한 것을 놓치고 있습니까?
--- EDIT --- 죄송합니다. 특정 프레임 워크를 사용하지는 않지만 속성 및 ICommand가있는 클래스를 사용합니다. 이상 작동하지 않는 이벤트 목록에 윈도우의 OnClosing 후크에서 호출되는 함수 ...
OnClosing += myViewModel.ViewModelClosing;
그러나 이상하게도, 난 그냥두면 윈도우의 (가 바인딩을 중단하지 않습니다) 직접 오버라이드 (override)
protected override void OnClosing(CancelEventArgs e)
{
if(MessageBox.Show("Ok to close", "Closing", MessageBoxButton.YesNo)
== MessageBoxResult.No)
e.Cancel = true;
}
MVVM 프레임 워크를 사용하고 있습니까? 보기가 닫히면 VM을 어떻게 처리합니까? – hyp
OP 편집보다는 본인의 질문에 대답하는 것이 도움이 될 수 있습니다. – TankorSmash
@TankorSmash, 정말 ... 이미 2 년 전에 게시판에 댓글을 달았습니다. 이미 대답했거나 답변을 드렸습니다 ... – DRapp