다른 Region 둘을 상호작용하게 하는 메세지 만들기
중단한 프로젝트/WPF_DevExpress를 이용한 Mvvm2019. 4. 17. 11:06
참고 : https://documentation.devexpress.com/WPF/17474/MVVM-Framework/Messenger
형태
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에 특정 메세지 형태에 자신의 함수를 바인딩해야 할 필요가 있습니다.
'중단한 프로젝트 > WPF_DevExpress를 이용한 Mvvm' 카테고리의 다른 글
DXBinding을 이용한콘텍스트 메뉴에 아이콘과 이름 그리고 이벤트를 바인딩하는 방법 (0) | 2019.04.17 |
---|---|
dxg:GridControl 에서 ComboBox를 twoWay로 바인딩하는 방법 (0) | 2019.03.25 |
dxg:GridControl 에서 xaml에 컬럼 설정 안하고 컬럼 이름 지정하는 방법 (0) | 2019.03.22 |
<dxg:GridColumn 각 cell 마다 글자와 체크박스가 나오게 하는 방법 (0) | 2019.03.19 |
dxprg:PropertyGridControl 사용 방법/ Tree아이템에 클릭시 반응하게 하는 방법 (0) | 2019.03.18 |