[DEVEXPRESS/WINFORM] DiagramControl 클래스 : CustomGetEditableItemProperties 이벤트를 사용해 속성 패널에 바인딩 데이터 소스 속성 추가하기
DevExpress/WinForm 2020. 6. 7. 21:50728x90
반응형
728x170
▶ MainForm.cs
using System.ComponentModel;
using System.Collections.Generic;
using DevExpress.Diagram.Core;
using DevExpress.XtraEditors;
using DevExpress.XtraDiagram;
namespace TestProject
{
/// <summary>
/// 메인 폼
/// </summary>
public partial class MainForm : XtraForm
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 생성자 - MainForm()
/// <summary>
/// 생성자
/// </summary>
public MainForm()
{
InitializeComponent();
#region 항목 리스트를 설정한다.
List<Item> itemList = new List<Item>();
for(int i = 0; i < 5; i++)
{
itemList.Add(new Item { ID = i, Name = "Item " + i });
}
#endregion
#region 링크 리스트를 설정한다.
List<Link> linkList = new List<Link>();
for(int i = 0; i < 4; i++)
{
linkList.Add(new Link { From = itemList[i].ID, To = itemList[i + 1].ID });
}
linkList.Add(new Link { From = itemList[4].ID, To = itemList[0].ID });
#endregion
#region 다이어그램 데이터 바인딩 컨트롤러를 설정한다.
DiagramDataBindingController diagramDataBindingController = new DiagramDataBindingController();
diagramDataBindingController.DataSource = itemList;
diagramDataBindingController.KeyMember = "ID";
diagramDataBindingController.ConnectorsSource = linkList;
diagramDataBindingController.ConnectorFromMember = "From";
diagramDataBindingController.ConnectorToMember = "To";
diagramDataBindingController.LayoutKind = DiagramLayoutKind.Circular;
#endregion
diagramDataBindingController.GenerateItem += diagramDataBindingController_GenerateItem;
this.diagramControl.CustomGetEditableItemProperties += diagramControl_CustomGetEditableItemProperties;
diagramDataBindingController.Diagram = this.diagramControl;
this.diagramControl.FitToDrawing();
}
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Private
#region 다이어그램 데이터 바인딩 컨트롤러 항목 생성시 처리하기 - diagramDataBindingController_GenerateItem(sender, e)
/// <summary>
/// 다이어그램 데이터 바인딩 컨트롤러 항목 생성시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void diagramDataBindingController_GenerateItem(object sender, DiagramGenerateItemEventArgs e)
{
DiagramShape item = new DiagramShape
{
X = 20,
Width = 75,
Height = 50,
Shape = BasicShapes.Rectangle
};
item.Bindings.Add(new DiagramBinding("Content", "Name"));
e.Item = item;
}
#endregion
#region 다이어그램 편집 가능한 항목 속성 커스텀 구하기 - diagramControl_CustomGetEditableItemProperties(sender, e)
/// <summary>
/// 다이어그램 편집 가능한 항목 속성 커스텀 구하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void diagramControl_CustomGetEditableItemProperties(object sender, DiagramCustomGetEditableItemPropertiesEventArgs e)
{
if(e.Item is DiagramShape)
{
PropertyDescriptor namePropertyDescriptor = e.CreateProxyProperty
(
"ID",
item => ((Item)item.DataContext).Name,
(item, value) => ((Item)item.DataContext).Name = value
);
e.Properties.Add(namePropertyDescriptor);
}
}
#endregion
}
}
728x90
반응형
그리드형(광고전용)
댓글을 달아 주세요