삽질의 현장/- .NET

#118_닷넷(.NET)_ WPF_ 데이터 바인딩_ 형식변환 (Converter)

shovelman 2015. 12. 6. 17:18


안녕하세요 삽잡이입니다.


지~난 시간에 바인딩에 대해서 알아본 적이 있는데요 (참고),

이 데이터 바인딩에 연장 선상이라고 생각하시고 

또 한번 바인딩에 대해서 알아보겠습니다.


이번 시간에는 Converter라는 바인딩 클래스의 속성을 사용하여

보여지는 내용을 형식 변환할 수 있다는 사실에 대해서 알아보려고합니다.



데이터 바인딩의 핵심은 '동기화'와 '타입 변환'이지요.



Binding을 할 때에는 여러 속성들을 사용할 수 있습니다.


기존에는 Path를 생략하고 단지 속성과 연결해주는 것이 

바인딩이라고 생각했었는데,

Path는 단지 데이터 원본 객체의 데이터에 대한 경로를 설정하는 것이었습니다.

그런데, Path는 Default이기 때문에 생략하며 사용했던 것이죠.



이런식으로... 이 외에도 여러 속성들이 존재하는데,

여러 속성들을 사용할 때에는 생략이 불가능합니다.


Mode는 단방향/ 양방향을 설정할 수 있고,

Source 속성의 경우 Direct로 Source에 적힌 원본을 참조하게 됩니다.


Converter의 경우...

바인딩에서 동기화와 함께 중요하다고 했던 것이 

바로, '형식 변환'이라고 하지 않았습니까?

Converter는 타입 변환을 해주는 속성입니다.



위의 예제의 위에는 사실 리소스가 존재합니다.

타입 변환을 위해 바인딩을 한 것입니다.

즉, Age라는 속성을 바인딩 시켰고,

ageConverter라는 리소스의 이름을 통해 

정수를 문자열로 혹은, 문자열을 정수로 변환해주도록 Converter 속성을 사용한 것입니다.


 

이처럼 Converter 속성에 연결되있는 핸들러는

IValueConverter를 구현한 클래스이어야합니다.


Source와 Target에 대한 형식 객체를 지정하게 되는데,

특성을 달아서 XAML 코드와 컴파일러에 이 사실을 알려주는 것입니다.



아무튼... 이와 같이 Converter를 달아주어 형식 변환을 해줄 수 있습니다.

이때, Converter, ConvertBack이라는 두가지의 메서드 역시 필요합니다.


이처럼 사용자가 Converter를 만들어 형식 변환을 해줄 수도 있습니다.



이번 시간은 여기까지 하도록 하겠습니다.


이상 삽잡이였습니다!


<참고 : Programming WPF : 사용자 경험(UX)을 바꾸는 기술>