2Bbear's knowledge workshop

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

확인

참고 : https://documentation.devexpress.com/WPF/17474/MVVM-Framework/Messenger

 

Messenger | WPF General | WPF Controls | DevExpress Help

The Messenger class implements the IMessenger interface and allows you to implement the capability of exchanging messages between modules. Examine how to use Messenger with a simple sample. Imagine that you have a database that can be modified from multipl

documentation.devexpress.com

형태

A Region(발신자) => B Region(수신자) 로 메세지를 전송하여 B가 행동하게 하는 방법입니다

 

 

 

1. 메세지 형태를 정의합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/// <summary>
    /// TopReport Region에 상호작용 하는 메세지를 보내는 형식
    /// </summary>
    public class TopReportRegionMessage
    {
        /// <summary>
        /// 메세지 종류
        /// </summary>
        public enum Messagetype { SelectItem, DeleteItem, ModifyItem , AddItem, ChangeTree }
        public Messagetype messagetype;
        public object RecordID { get; private set; }
        public TopReportRegionMessage(object recordID, Messagetype _messageType)
        {
            RecordID = recordID;
            messagetype = _messageType;
        }
    }
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4f; text-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none; color:white">cs

2. 메세지를 수신할 B Region 에 수신 함수를 만들어 줍니다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
 
        public void OnMessage(TopReportRegionMessage message)
        {
            switch (message.messagetype)
            {
                case TopReportRegionMessage.Messagetype.AddItem:
                    {
                       
                    }
                    break;
                case TopReportRegionMessage.Messagetype.SelectItem:
                    {
                       
                    }
                    break;
                case TopReportRegionMessage.Messagetype.DeleteItem:
                    {
                      
                    }
                    break;
                case TopReportRegionMessage.Messagetype.ModifyItem:
                    {
                       
                    }
                    break;
                case TopReportRegionMessage.Messagetype.ChangeTree:
                    {
                        //MessageBox.Show("CLM_TopReport ChangeTree 그러니까 리포트 내용 바꾸세요 param :"+ (string)(message.RecordID));
                    }
                    break;
            }
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4f; text-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none; color:white">cs

3. 만든 OnMessage 함수를 이제 Messenger.Default에 등록해봅시다.

1
2
3
4
        private void InitMessage()
        {
            Messenger.Default.Register<TopReportRegionMessage>(this, OnMessage); //Message Manager에 현재 클래스가 TopReportRegionMessage를 수신 할 수 있다! 라고 등록하는 코드
        }
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4f; text-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none; color:white">cs

 

4. 메세지를 전송할 코드를 만들어줍시다. Region A에 작성

1
Messenger.Default.Send(new TopReportRegionMessage("dddd",TopReportRegionMessage.Messagetype.ChangeTree));
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none; color:white">cs

Messenger는 DevExpress에서 기본적으로 지원해주는 클래스입니다.

using DevExpress.Mvvm; 을 선언해주시면 사용 하실 수 있습니다.

 

 

- 설명

실제로 메세지를 RegionA가 B로 전송하는 것은 아닙니다. 중간에 Messenger라는 클래스가 존재하고 있어 받은 메세지를 올바른 목적지로 전송하는 형태를 취하고 있죠

즉 RegionA는 Messenger라는 클래스에 메세지를 보내고 

Messenger는 해당 메세지 형태에 바인딩된 함수를 실행시키고 메세지의 파라미터를 함수로 넘겨줍니다.

 

이 과정 전에 수신 region B는 미리 Messenger에 특정 메세지 형태에 자신의 함수를 바인딩해야 할 필요가 있습니다.

 

 

Comment +0

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

확인

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

확인

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

확인

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

확인

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

확인

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

확인