2010-06-28 8 views
1

Josh Smith의 MVVM Foundation 프로젝트 메신저 클래스를 사용 중이며 메시지 수신 거부에 관한 질문이 있습니다. 순간 나는 예를 들어 문자열로 메시지를 등록 여러 ViewModels를 가지고 내가 가진 -mvvm wpf 메신저 클래스, 메시지 등록 취소

ViewModelA - "A" ViewModelB 메시지 등록 - 메시지 등록 "A"

그래서 등록 된 메시지를 모두 동일한가 끈.

내 질문에, ViewModel이 닫혀있을 때 ViewModel의 인스턴스에서 특정 메시지를 등록 해제하는 가장 좋은 방법은 무엇입니까 (복수의 ViewModel이 동일한 메시지 문자열을 가질 수 있음).

건배,

팀.

답변

2

Messenger 클래스의 전체 키는 구독자 ("동료")에 대한 약한 참조 만 보유하므로 ViewModel을 닫으면 가비지 수집 즉시 메시지 수신이 중단됩니다.

가비지 수집을 기다리는 것이 여전히 좋지 않으면 가비지 수집을 시도 할 수 있습니다. 자세한 내용은 this link을 참조하십시오.

내가 생각할 수있는 유일한 대안은 Messenger의 하위 클래스로 자신의 Unregister() 메서드를 작성하는 것입니다.