2011-10-17 3 views
0

이 마음 ... 그것을 발견 ... 너무 ...여전히 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; 
} 
+2

MVVM 프레임 워크를 사용하고 있습니까? 보기가 닫히면 VM을 어떻게 처리합니까? – hyp

+0

OP 편집보다는 본인의 질문에 대답하는 것이 도움이 될 수 있습니다. – TankorSmash

+0

@TankorSmash, 정말 ... 이미 2 년 전에 게시판에 댓글을 달았습니다. 이미 대답했거나 답변을 드렸습니다 ... – DRapp

답변

2

나는 hyp에 동의합니다. WPF 자체는 DataContext를 자동으로 지 웁니다. MVVM 프레임 워크를 사용하면 메모리 누수를 막을 수 있습니다.하지만 분명히 너무 열심히하고 있습니다.

+0

답변을 찾은 후 디버그를 살펴보면 약간 발견되었습니다 ... – DRapp