2009-11-24 5 views
4

저는 WPF 앱을 만들고 MVVM 모범 사례를 준수하려고합니다. 나는 MVVM Foundation 프레임 워크를 사용 중이며 Messenger 클래스를 알아 냈습니다.이 클래스는 handling dialogs in WPF에 사용해야합니다. 위대한 소리지만,이 목적으로 Messenger를 사용하는 방법을 완전히 이해하지 못했습니다. 말 그대로, 내가하고 싶은 것은 모달 정보 대화 상자를 여는 것입니다 - 나는 어떤 메시지도 앞뒤로 보낼 필요가 없습니다.MVVM Foundation Messenger를 사용하여 대화 상자 표시

대화 상자에서 부모로부터 메시지가 필요하거나 부모에게 메시지를 반환하는 경우 Messenger 클래스의 의도가 사용 되었습니까? 정보 대화 상자에 잔인한가요? 대화 상자를 표시하는 코드를 이벤트 처리기에 추가하는 것이 더 낫지 않습니까?

답변

5

메시징 패턴의 개념은 대화 상자 표시와 관련이 없습니다. 아이디어는 단순히 ViewModel 간 통신을위한 분리 된 방식을 제공하는 것입니다.

이 인프라를 활용하여 문제를 해결할 수 있지만 직접 대화 상자를 구현해야합니다.

Phillip이 위에서 보여 주듯이 ViewModels간에 메시지를 보낼 수 있습니다. ViewModel이 메시지를 수신하면 자신의 내부 속성 (예 : "ShowDialog")을 true로 설정할 수 있습니다.

그러면이 속성 변경 작업에 반응하는 바인딩을 가지고 대화 상자를 열 수 있습니다.

나는 또한, 조쉬의 아이디어에서 차용 MVVM 패턴에 대한 간단한 메시징 프레임 워크 (및 다른 여러 기존 프레임 워크)는 here

+0

이 Oooohhh ..... 그 많은 의미가에 대해 당신이 읽을 수를 구축 지금. MyViewModel이 AboutViewModel에 메시지를 보내고 AboutViewModel이 정보 대화 상자를 엽니 다. 그게 내 혼란을 분명히 고맙습니다. – senfo

+0

문제 없으니 도움이 되니 기쁩니다. –

3

부모보기 및 대화보기가 있다고 가정 해보십시오. MVVM에서 그들은 모두 뷰 모델을 가지고 있습니다. 이러한 뷰 모델을 분리 된 상태로 유지하는 것이 좋습니다. 즉, 서로에 대한 참조가 없습니다. 그렇지만 그들은 서로 의사 소통을해야합니다. 메신저 클래스는 두 클래스 사이의 정보 통신을 중재하기 위해 중개자 또는 중개자 역할을합니다. Josh's blog에서 가져온 코드를 참조하십시오. 여기

alt text

그것은 중재자의 등록 메소드 호출의 구현 개체 A.입니다 : 내가 메시지 ObjectBSaidSomething를받을 때, 중재자에서, 나는 멤버 WhatObjectBSays에 캐시됩니다. 내가 메시지 ObjectBSaidSomething를 보내려고 : 여기

alt text

는 구현 개체 B입니다. 오브젝트 B는 오브젝트 A에 관해서 아무것도 모르고 있습니다. ObjectBSaidSomething, 또는 ObjectBSaidSomething을 청취하는 100 개의 오브젝트를 청취하는 것은 없지만, 오브젝트 B는 알지 못하고 상관하지 않습니다. 이는 훌륭한 디커플링이며, 이것이 중재자 패턴이 좋은 아이디어 인 이유입니다. 그리고 이것은 MVVM 재단이 정보를 뷰 모델간에 전달하도록 권장하는 방식입니다.

관련 문제