2011-11-08 5 views
4

MVVM (WPF 용)의 대화 상자 모범 사례에 대한 합의가 있습니까?내 ViewModels에서 대화 상자를 생성하는 방법은 무엇입니까?

  1. 매개체 (EventAggregator, EventBus, 또는 당신은 전화를 원하는대로)는 "DialogProcessed"메시지에 대한 "RequestsDialog"메시지를 보내고 기다리는 그 : 나는 두 가지 방법을 통해 접근 보았다.

  2. 호출자의 뷰 모델에 바인딩되어 Command 또는 EventTrigger 등을 통해 표시되는 xaml보기 자체에서 선언 된 대화 상자입니다.

나는 더 좋은 방법이 무엇인지 알아 내려고하고 있습니다. 도움이 필요합니다.

# 1에 대한 내 관심사는 (언제나 그렇듯이) 요청 및 응답 메시지의 범위를 제어하는 ​​가장 좋은 방법은 무엇입니까? 내 말은, "local"메시지와 "global"애플리케이션 메시지가 중재자에 의해 처리된다고 가정 해 봅시다. 어떻게하면 내 ViewModel이 여전히 글로벌 메시지를받을 수 있는지 어떻게 확인합니까?하지만 동시에 다른 ViewModel 현재 창에서 실수로 활성 ViewModel 용 DialogProcessed 메시지를 수신하지 않습니다.

  • ViewModel1 내가 글로벌 메시지가
  • ConfirmationResponse 메시지에 대한 RequestConfirmation 메시지를 전송하고 대기하는 각각의 독립적 인 ViewModels에 바인딩,
  • 이 된 UserControls

    • 1 창 :

      는 다음과 같은 시나리오를 가지고 (RequestCloseWindow 메시지와 같이) ViewModel1에서 수신합니다.

    ViewModel2가 ViewModel1에서 시작한 RequestConfirmation 메시지에 대한 ConfirmationResponse 메시지를 가져 오지 않도록하려면 어떻게해야합니까?

  • 답변

    1

    당신이 프리즘에서 InteractionRequests 비슷한을 사용하여 시도해 봤어 말할 수 Processed 메시지를 처리하는 방법에있어서 그 방법은?

    그들은 정확히 설명한 시나리오를 포함합니다. this 문서를 확인하십시오.

    1

    매개 변수를 전달할 수있는 사람이 누구인지 식별하는 메시지와 함께 매개 변수를 전달하거나 완료된 메시지를 실행하는 데 필요한 대리인이 메시지에 포함되도록 할 수 있습니다.

    보통 식별자가 더 간단하기 때문에 선호합니다. 때로는 ID 또는 GUID이지만 대개는 this입니다. 난 그냥

    if (evt.Source != this) return; 
    
    +0

    "Response"이벤트를 발생시키는 사람은 응답의 evt.Source에서 "Request"이벤트의 원본 소스를 전달합니까? – Jeff

    +0

    @ JeffN825 물론 그렇습니다. – Rachel

    관련 문제