JHB의 프로그래밍 삽질기

[WPF] User Control에 Custom Attribute로 값 전달하기 본문

PROGRAMMING/C# WPF

[WPF] User Control에 Custom Attribute로 값 전달하기

roter 2018.04.22 03:30

이걸로 3일을 고생했다.

아무리 검색해도 안나와서 정말 삽질이 심했다. 삽질 결과를 공유한다.


<local:TTGridView Width="500" Height="auto" ColumnCount="10" RowCount="10"/>

2차원 배열에 담긴 데이터를 보여주는 TTGridView를 만들었다.

쉽게 그냥 ColumnCount와 RowCount 만큼의 행열을 만들어서 데이터를 보여주는 간단한 유저 컨트롤이다.


그런데... attribute로 값을 넘기고 싶은데... 아무리 검색해도 그냥 user control의 cs 파일 내에 property 만들면 된다고 하는데..

안되더라


public int ColumnCount { get; set; }
public int RowCount { get; set; }

일단 선언 자체는 위처럼 했고..


진짜 별의 별.. 의존성 프로퍼티니 뭐니 다 시도했는데

가장 큰 문제는

생성자에서 ColumnCount와 RowCount의 값이 null 값으로 들어온다는 것이였다.... (string일땐 null, int일땐 0)


이런 저런 방법을 엄청나게 많이 시도했는데 다 실패했다.

포기해야하나 싶었는데 결국 검색에 검색을 하다가 알아냈다.


바로 OnApplyTemplate() 였다..

public override void OnApplyTemplate()
{
base.OnApplyTemplate();

//..
}


의존성 프로퍼티 (DependencyProperty)로 PropertyMetadata를 만들어서, OnValueChanged 핸들러에 값이 전달되는 시점을 보니

생성자 호출이 다 끝나고 나서야 저게 호출이 되고 값이 들어가더라 -_-


즉, 생성자에서 TAG에 담긴 Attribute는 넘어오지 않았던 모양.... 어째서 -_- 그럴거면 뭐하러 InitializeComponent를 뒀어 엉엉...

여튼 그래서..

OnApplyTemplate를 override 해서 관찰해보니 저녀석에선 값이 잘 넘어오는게 보이더라..

이름부터가 뭔가 외관 꾸미는놈 처럼 생겼으니.... 여기서 처리하시면 되겠단 말씀!

(나중에 보니 실제로 User Control의 상세 내역은 OnApplyTemplate에서 구현한다고 한다... 그럴거면 Wizard에서 이놈까지 생성해서 제공해줄것이지 -_-)


덕분에 3일 삽질했다!!!!!!!!!!!!!!!!!




Tag
,
0 Comments
댓글쓰기 폼