2009-11-03 3 views
1

중재자 패턴이 여러 인스턴스와 함께 작동하는 방식을 설명 할 수 있습니까? 뷰에서MVVM Mediator 복수 인스턴스

내 코드 :

public MyView() { 
    Mediator.Register("CloseWindow",()=>Close()); 
} 

와 뷰 모델에이만큼보기 하나의 인스턴스 만 존재하는 한 찾을 작동

public SomeMethod() { 
    Mediator.Notify("CloseWindow"); 
} 

- 뷰 모델 쌍.

여러 인스턴스로 어떻게 해결할 수 있습니까?

답변

1

대체 솔루션을 사용합니다. MyView는 Close 메서드가 포함 된 IMyView 인터페이스를 구현합니다. MyViewModel 객체는 View를 연관 시키므로 인터페이스를 통해 Close 메서드를 호출 할 수 있습니다. 당신이 구체적인 예에 ​​관심이 있다면

는 당신이 봐있을 수 있습니다 : 그 생각

WPF Application Framework (WAF)

+0

인터페이스보다 단순 해 보였으므로 중재자 패턴을 선택 했으므로 수직 (MV <-> V)과 horisontal (MV <-> MV) 모두 사용할 수 있습니다. 이제는 그것이 잘못되어 대신 인터페이스를 사용할 것입니다. 중재자 패턴은 내 의견으로는 근본적으로 부러졌다. 중재자는 평생 통제를 위해 GC를 사용하지만보기는 그렇지 않습니다. 대답은보기에 중재자를 사용하지 않기위한 것입니다. – adrianm

0

메디 에이터 패턴의 특정 구현이 어떻게 작동하는지 모르겠지만 광산에서는 단지 문자열 이상으로 정보를 보낼 수 있습니다. 예를 들어

:

public MyView() { 
    Mediator.Register<CloseWindowMessage>(message => 
    { 
     if (message.ViewModel == DataContext) Close(); 
    }); 
}  

및 뷰 모델에서 :

public SomeMethod() { 
    Mediator.Notify(new CloseWindowMessage(this)); 
} 

이 예에서, 뷰 모델 뷰에 파라미터 자체를 통과한다. 그런 다음보기는 해당보기 모델에서 메시지가 전송되고 있는지 확인할 수 있습니다.

+0

을하지만 난 그게 옵트 인 전략의 대부분을하게 생각합니다. Close 이벤트의 메시지에서 등록을 취소하는 솔루션에 기대고 있습니다. – adrianm

+0

또는 각 대화 상자에 대해 별도의 메시지 클래스를 생성하여 "옵트 - 인"- 피를 방지 할 수 있습니다. – Grokys