2012-06-20 3 views
0

나는 이벤트 수집기를 사용하여 셸에서 선택하는 전역 유형의 메시지를 보내는 WPF Prism 응용 프로그램 개발에 참여하고 있습니다. 예를 들어,보기 모델은 토스트 메시지가 표시되기를 원하지만 실제로 표시되는 방법은 신경 쓰지 않습니다. 이 경우 셸은 해당 이벤트를 처리하고 응용 프로그램 전체에서 작동하도록 설정됩니다.조건부 동작을위한 이벤트 수집기

특정보기에서 토스트 메시지를 다르게 표시하려면 어떻게해야합니까? 나는 매우 간단하기 때문에 글로벌 접근법을 좋아하지만, 특별한 경우를 위해 그것을 어떻게 사용자 정의 할 수 있습니까?

답변

1

저는 이것이 여러분의 응용 프로그램이 어떻게 설정되어 있고 어떤 표준/패턴을 사용하고 있는지에 달려 있다고 생각합니다. MVVM에서는 두 가지 접근 방식을 사용합니다.

보기 - 먼저
보기 - 모델이보기에 주입되면,보기에 메시지를 보내고,보기 그것으로 무엇을 결정할 수 있습니다. 자신을 표시하고 싶다면 그렇게 할 수 있습니다. 그것들을 쉘로 보내고 싶다면, 이벤트 수집기를 통하거나 Toast 서비스 인터페이스를 주입 할 수 있습니다. 그러면 시각적으로 뷰를 제어 할 수 있습니다.

보기 - 모델 - 우선
로보기 다음보기 모델 자체보기 모델에 바인딩해야 다른보기를 요구한다, 당신의보기-모델에 주입됩니다. 다른 View-Model로 메시지를 보내려면 이벤트 수집기를 통하거나 Toast View-Model/service 인터페이스를 통해 메시지를 보낼 수 있습니다. 이렇게하면 뷰 - 모델이 뷰 간의 탐색을 제어 할 수있게됩니다.

View-First 방식은보기가 모델의 시각화를 제어 할 수 있기 때문에 선호합니다. 하지만 다른 MVVM 개발자가이 문제를 어떻게 다루는 지에 대해서는 관심이 많습니다. 이것은 MVVM View-First 접근 방식에서 대화 상자를 제시하는 방법에 대한 질문과 매우 밀접하게 연관되어 있습니다.

1

이 목적으로 Eventaggregator를 사용하는 것은 이벤트가 전체 응용 프로그램에 브로드 캐스팅되기 때문에 내가 생각하는 바른 방식이 아닙니다.

시나리오를 처리 할 수있는 한 가지 방법은 viewmodels에서 생성자에 IMessenger 인터페이스를 주입하는 것입니다. IMessenger (기본적으로 삽입되는)의 응용 프로그램 구현이 있으며 필요에 따라 IMessenger의 구현을 사용자 정의 할 수 있습니다. 귀하의 뷰 모델은 인터페이스 함수 (예 : DisplayMessage())를 호출하지만, 거기에 주입 된 메신저에 따라 동작이 다릅니다.

관련 문제