의존속성은 기존의 속성을 확장하여 WPF적인 요소를 추가한 속성이라고 할 수 있는데, 

1. code-behind, xaml 측에서 모두 접근 가능

2. 의존속성이 변경되면 그에 맞게 자동으로 렌더링, 로드 등의 처리

의 특징을 갖는다.


기존의 멤버변수와 표현상의 사용법이나 기능은 동일하나 위의 기능을 포함하고 있어 동적으로 변경하는 상황에서 훨씬 강력하고 쉽게 사용할 수 있다.

아래의 사진은 모든 컨트롤들의 기본이 되는 FrameworkElement 클래스의 정의 부분이다.

흔히 많이 사용하는 ActualWidth, ActualHeight 등의 속성들이 의존속성으로 선언되어 있는 것을 확인할 수 있다.

즉 흔히 우리가 사용하는 Width, Height, Background 등의 속성이 사실 다 의존속성이라는 것이다.!




자, 그럼 의존속성은 그냥 "속성, 혹은 멤버변수와 비슷하되 WPF에서 기능을 확장한 특별한 속성이다 !" 라고 이해하고 넘어가서 어떻게 생성하고 사용하는지 알아보자.

1. 의존속성을 선언                    

2. 의존속성을 등록

3. 프로퍼티 생성

위와 같이 생성하면 기존의 다른 의존속성처럼 사용할 수 있다.




Binding 이란 data, 혹은 property 를 서로 연결하여 서로 동적으로 변환 및 참조할 수 있도록 한다.

즉, 한 엘리먼트의 프로퍼티를 다른 엘리먼트의 프로퍼티, 혹은 데이터와 연결하는 과정이다.


바인딩을 통해 쉽게 서로 값들을 참조하여 동적으로 변경시킬 수 있고, 긴 처리 없이 간단하게 리스트에 DataTable 을  표시하는 등 장점이 많기 때문에 WPF로 작업할 때 바인딩은 필수적으로 사용한다.


바인딩 모드는 OneTime, OneWay, OneWayToSource, TwoWay 의 4가지가 존재한다.

OneTime : 최초 한번만 값을 전달

OneWay : A를 B에 바인딩했다면, B의 값이 변경되면 A의 값도 변경. 하지만 A의 값이 변경되었을 시 B의 값은 변경되지 않음

OneWayToSource : OneWay와 반대.(A와 B의 방향이 반대)

TwoWay : 하나가 변경되면 다른 하나도 따라서 변경됨


바인딩 하는 방법은 1. xaml 측에서 하는 방법. 2. code-behind(C#측) 에서 하는 방법 모두 가능하다.

1. xaml 측에서 하는 방법

<TextBlock x:Name="myText">sample text</TextBlock>

<TextBlock Text="{Binding Text, ElementName=myText, BindingMode=TwoWay}/>


2. c# 측에서 하는 방법

BindingOperations.SetBinding(myElement, myElement.WidthProperty, new Binding { Source = targetElement, Path = new PropertyPath("Width"), Mode = BindingMode.TwoWay });


위와 같은 방법으로 바인딩을 할 수 있다.



'Dev > WPF' 카테고리의 다른 글

[WPF] Binding (바인딩) - Converter (컨버터)  (0) 2012.07.24
[WPF] Dependency Property (의존속성)  (0) 2012.07.24
WPF와 Silverlight  (0) 2012.07.24
WPF 란  (0) 2012.07.24


WPF
 와 실버라이트는 부모와 독립한 자식 정도의 개념인 것 같다. 그 차이가 애매해서 헷갈리는 경우가 더러 있는데, 일전에 관련된 내용을 조사한 것이 있어서 간단하게 정리하려고 한다.


WPF에 대한 설명은 앞의 포스팅으로 대체하고


실버라이트는 초기에 WPF/E 라는 코드명으로 불리었는데, 이는 WPF/everywhere 의 약자라고 한다. WPF의 컴팩트 버전이라고 볼 수 있는데, 브라우저에 설치하는 플러그인의 형태로 flash 와 같은 플러그인이라고 볼 수 있다. 하지만 flash를 대체하기에는 이미 flash의 위상이 너무 높아 한계가 있는 것으로 보여진다.


컴팩트 버전이기 때문에 문법에는 차이가 없고(거의), 대신 지원하지 않는 기능들이 존재한다. Binding 이나 EventTrigger,, 3D Graphics 등의 기능들은 WPF와 비교하여 부분적으로만 지원하고 있다.


두 플랫폼 사이의 기능상의 차이는 아래의 문서를 보면 잘 소개되어 있다(영어로)

2년이 넘어 변경사항이 많겠지만 좋은 참고자료가 될 것이다


WPF-Silverlight Comparison Whitepaper v1.1


요약하면 풍부한 기능과 강력한 성능을 보이는 WPF와, 기능이나 성능 상의 부족함은 있지만 설치가 간단하고 browser 기반으로 device에 비종속적이라는 장점을 지닌 것이 실버라이트 라고 하겠다.


하지만 wpf에서도 xbap을 이용하여 브라우저에서 실행되는 형태로 만들 수 있고, 반대로 실버라이트에서도 로컬에서 동작할 수 있는 형태로 만들 수 있다. 하여 둘 사이의 차이가 모호해졌다. 이 때문에 wpf와 실버라이트가 결국 통합될 것이라는 얘기가 있었으나, 최근의 추세를 보면 통합보다는 완전한 분리로 방향을 잡은 것 같다.


MS에서는 Silverlight 를 WIndow Phone 7 의 개발 플랫폼으로 정착시키려고 노력하는 것처럼 보인다. 하여 윈도우 응용 프로그램 플랫폼인 WPF와, 모바일 플랫폼인 실버라이트로 분리하여 각각을 발전시켜 나갈 것으로 보인다






'Dev > WPF' 카테고리의 다른 글

[WPF] Binding (바인딩) - Converter (컨버터)  (0) 2012.07.24
[WPF] Dependency Property (의존속성)  (0) 2012.07.24
[WPF] Binding (바인딩) - Intro  (1) 2012.07.24
WPF 란  (0) 2012.07.24

WPF (Window Presentation Foundation)






Window Vista 에서 새로운 UX 를 제공하기 위해 만든 플랫폼이라고 할 수 있다.


flash, flex 의 대항마로 MS 측에서 만든 플랫폼이라고 할 수 있겠고, 윈폼의 차세대 버전 정도라고 보면 될 것 같다.

기존의 닷넷 응용프로그램과는 달리 GDI+ 대신 Milcore 라는 형태의 중간 레이어를 통해 Direct X에 직접 접근한다. 하여 그래픽 측의 성능을 최적화할 수 있다.


그 외의 설명은 인터넷에 많이 나와있기 때문에 생략하고,


개인적으로 기존의 플랫폼과의 가장 큰 차이점은 xaml(eXtensible Application Markup Language) + c# 으로 코드가 분리되어 있다는 점이다.


xaml 은 xml을 기반으로 한 마크업 언어로 UI를 구현하며, c#에서는 기능을 구현하게 된다. 따라서 이상적인 경우에는 디자이너는 xaml을, 개발자는 c#만을 사용하여 개발할 수 있는 환경을 구축할 수 있다.



이 구조를 실제 프로젝트를 통해 한번 알아보자.


Visual Studio 에서 WPF Application 을 하나 만들어보면 다음과 같은 화면이 생성된다.




먼저 오른쪽 위에 Solution Explorer 를 보면 위에서 언급한 것 처럼 MainWindow.xaml 이라는 파일과 MainWindow.xaml.cs 파일로 분리되어 있는 것을 확인할 수 있다.


가운데 창에 MainWindow.xaml 파일이 열려있는데, 상단은 화면에 보여지는 모습, 아래 부분은 코드 이다. 코드를 보면 xml과 비슷하게 태그와 속성들로 구성되는 것을 확인할 수 있다.

'Dev > WPF' 카테고리의 다른 글

[WPF] Binding (바인딩) - Converter (컨버터)  (0) 2012.07.24
[WPF] Dependency Property (의존속성)  (0) 2012.07.24
[WPF] Binding (바인딩) - Intro  (1) 2012.07.24
WPF와 Silverlight  (0) 2012.07.24

+ Recent posts