SlideShare a Scribd company logo
CODE SHOP




데이터 바인딩
Data Binding




               2012. 07. 08
                    김대열
• 개념

• 바인딩 클래스

• 바인딩 설정

• 데이터 템플릿

• 데이터 변환

• MultiBinding

• MultiConverter

• 바인딩 경로

• 컬렉션 바인딩

• 데이터 프로바이더

• 바인딩 데이터 유효성
바인딩이란
• 응용 프로그램 UI와 비즈니스 논리를 서로 연결하는 프로세스.
  ( MSDN )

• 데이터 : 객체, XML 파일, 웹 서비스, 데이터 베이스, 버튼 같은 WPF 요
       소 등.

• 대상 요소와 데이터를 연결 하는 것.




            UI                  DATA
바인딩의 이점
• 코드 양의 감소.



• 데이터의 유연한 UI 표현



• 비즈니스 로직과 UI의 분리



• MVVM 패턴의 기본 요소
구성요소
바인딩 대상 ( Target )                   바인딩 소스 ( Source )

객체                                  객체
( Dependency Object )               ( Object )


      종속성 속성                                  속성
                          Binding
( Dependency Property )                   ( Property )




4가지 필수 요소
- 대상 객체 : DependencyObject 에서 파생한 객체
- 대상 속성 : 종속성 속성 ( 읽기 전용 제외 )
- 소스 객체
- 소스 속성
데이터 흐름
 바인딩 대상 ( Target )                          바인딩 소스 ( Source )

 Dependency Object            One Way       Object

                              Two Way
       종속성 속성                                        속성
                           OneWayToSource
 ( Dependency Property )                         ( Property )
                              OneTime



- OneWay : 소스가 변경될 때마다 타깃이 갱신. ( 단방향 )
- TwoWay : 대상이나 소스가 변경되면 서로 갱신. ( 양방향 )
- OneWayToSource : 대상이 변경될 때마다 소스가 갱신. ( OneWay 역방향 )
- OneTime : 대상 속성은 바인딩 클래스가 인스턴스화 될 때, 한번만 적용되며
           이 후 소스가 변경되어도 반영되지 않음.
소스 업데이트 시점
 바인딩 대상 ( Target )                               바인딩 소스 ( Source )

 Dependency Object                               Object
                           UpdateSourceTrigger

       종속성 속성                   Two Way                   속성
 ( Dependency Property )                              ( Property )
                           OneWayToSource




- PropertyChanged : 대상 속성이 변경되는 즉시 갱신.
- LostFocus : 대상 속성의 값이 변경되고 대상 요소가 포커스를 읽었
              을 때 갱신.
- Explicit : 사용자가 직접 갱신. ( BindingExpression.UpdateSource )
바인딩 클래스
• System.Windows.Data.Binding

• 두 개의 속성을 이용해 채널을 연결

• 마크업 확장식 클래스

• BindingExpression : 소스와 대상사이의 연결을 유지관리
                   하는 클래스

• BindingOperations : 바인딩 객체들을 참조하여 조작하는
                    정적메소드를 제공.
바인딩 클래스 – 설정 / 제거 메소드
• SetBinding
: FrameworkElement, FrameworkContentElement 상속 메소드

• BindingOperations.SetBinding
: FrameworkElement, FrameworkContentElement 객체가 아니어도
  DependencyObject 객체면 바인딩 할 수 있음.

• BindingOperations.ClearBinding
: 한 개의 바인딩 된 속성 제거.

• BindingOperations.ClearAllBindings
: 대상 객체가 한 개 이상의 바인딩이 되어 있을 경우 모두 제거.
바인딩 설정




                                                     소스 객체 ( Source )
                                                     소스 속성 ( Property )


  대상 객체 ( Target )   대상 속성 ( Dependency Property )
바인딩 설정
< ElementName >




                  바인딩 클래스는 Path 프로퍼티를 사용하는 생성자가 있기 때문에
                  명시적으로 프로퍼티를 사용하지 않을 수 있다.
바인딩 설정
< DataContext >




< Source >




 Source 프로퍼티를 사용하려면 대상 객체가 ResourceDictionary에 리소스로 정의되어야 한다.
바인딩 설정
< RelativeSource >




                     ElementName, Source, RelativeSource 중 하나만 설정 가능.
RelativeSource
바인딩 대상의 위치에 상대적인 위치를 지정하여 바인딩 소스를 가져오거나
설정. ( 컨트롤 템플릿에 사용하기 유용 )

- { Binding RelativeSource={ RelativeSource Self } }
: 소스 객체와 대상 객체가 동일

- { Binding RelativeSource={ RelativeSource TemplateParent } }
: 소스 객체와 대상 객체의 TemplateParent를 동일

-  { Binding RelativeSource={ RelativeSource FindAncestor, AncestorType={ x:Type
   desiredType } } }
: 소스 객체와 주어진 타입에 가장 근접한 부모 객체를 동일

-  { Binding RelativeSource={ RelativeSource FindAncestor, AncestorLevel=n,
   AnsestorType={ x:Type desiredType } } }
: 소스 객체와 주어진 타입에 n 번째 가까운 부모 객체와 동일

- { Binding RelativeSource={ RelativeSource PreviousData } }
: 소스 객체와 데이터 바인딩된 컬렉션의 이전 데이터와 동일
바인딩 고려사항
• 단순 프로퍼티를 소스 프로퍼티로 사용할 경우, 변경통보가 일어나지
  않기 때문에 소스 객체의 속성이 변경되어도 갱신되지 않음.



• INotifyPropertyChanged 인터페이스를 구현하여 해결 함.



• 소스 프로퍼티는 닷넷 객체의 어떤 프로퍼티도 사용할 수 있지만 단
  순한 필드가 아닌 실제 프로퍼티여야 하며, 대상 객체의 프로퍼티는
  반드시 의존 프로퍼티여야 함.
Data Template
 대상 객체에 바인딩 된 데이터를 시각적으로 표현
데이터 변환
•   소스의 값을 변경하여 대상에 전달할 수 있음.

•   서로 다른 타입의 소스와 대상을 사용할 경우 유용함.

•   IValueConverter 인터페이스 구현

•   멀티 바인딩 사용시 IMultiValueConverter 사용


    바인딩 대상 ( Target )                    바인딩 소스 ( Source )

    Dependency Object                    Object


          종속성 속성              데이터 변환              속성
    ( Dependency Property )                   ( Property )
데이터 변환
 바인딩 대상 ( Target )            바인딩 소스 ( Source )

 Label                        Slider


                     데이터 변환
         Content                       Value
데이터 변환 - IValueConverter




                 < Source -> Target >



                 < Target -> Source >
MultiBinding
•   대상 객체에 여러 개의 소스를 바인딩 할 경우 사용.
•   입력되는 여러 타입의 데이터 처리를 위해 멀티 컨버터를 사용해야 함.

                                                         바인딩 소스 ( Source )

                                                         Object
    바인딩 대상 ( Target )                                          속성
                                                           ( Property )

    Dependency Object                                    바인딩 소스 ( Source )

                                                         Object
          종속성 속성                    데이터 변환                     속성
    ( Dependency Property )   ( IMultiValueConverter )     ( Property )

                                                         바인딩 소스 ( Source )

                                                         Object
                                                               속성
                                                           ( Property )

                                                                .
                                                                .
                                                                n
MultiBinding
데이터 변환 - IMultiValueConverter
ProirityBinding
• 다수의 바인딩 객체를 사용한다는 점에서 MultiBinding 과 유사하나
  대상 객체의 값 설정을 위해 객체들을 경쟁시킴.

• 바인딩의 우선순위는 목록 순서이며, 목록의 첫 번째 부터 마지막까
 지 바인딩을 진행하며 성공여부 확인.

• 데이터 소스와 바인딩이 오래 걸릴 경우 대기하는 동안 빠른 바인딩
  을 먼저 처리하여 보여줌.

• 우선순위가 높은 바인딩이 성공하면 현재 값으로 대체.
바인딩 경로
•   Path=Main.Sub : 하위속성 지정

•   Path=Index[0] : 인덱서 적용, 중첩가능

•   Path=Name[First, Last] : 인덱서, 하위 속성

•   Path=/ : 소스가 컬렉션 뷰인 경우 현재 항목지정

•   Path=/Root/Sub : 속성 이름과 슬래시를 결합하여 컬렉션 속성을 이동

•   Path=“[(sys:Int32)42, (sys:Int32)24]” : 매개변수 형식은 괄호 안에 지정

•   마침표(.) 경로는 현재 소스와 바인딩

•   Text={ Binding }은 Text={ Binding Path=. } 와 같음.
컬렉션 바인딩
• 일반적으로 ItemsControl의 ItemsSource 속성과 바인딩.

• ListBox, ListView, TreeView 등.

• IEnumerable 인터페이스를 구현한 컬렉션

• 변경 알림을 위해서는 INotifyCollectionChanged 인터페이스 구현
   ( 삽입, 삭제 )

• ObservableCollection<T> : INotifyCollectionChanged 인터페이스를
   기본으로 구현한 클래스
컬렉션 뷰
• 컬렉션을 바인딩 시 기본 뷰가 대상과 소스 사이에 암시적으로 추가.

• ICollectionView는 기본 컬렉션의 자체 변경없이 정렬, 그룹핑, 필터링,
 탐색 기능을 사용할 수 있는 바인딩 소스 컬렉션의 최상위 계층.

• 현재 항목에 대한 포인터 유지 관리.

• CollectionViewSource.GetDefalutView 메소드로 컬렉션의 기본 뷰를
  반환
컬렉션 뷰 - 정렬
• ICollectionView 인터페이스의 SortDescriptions 프로퍼티 사용

• 동시에 여러 프로퍼티 정렬 가능.
( 목록 순으로 우선순위 설정 )

• ListSortDirection 열거형으로 방향 설정

• SortDescriptions.Clear 로 제거
컬렉션 뷰 - 그룹핑
• ICollectionView 인터페이스의 GropDescriptions 프로퍼티 사용.

• PropertyGroupDescription 객체를 추가
 ( 밸류 컨버터를 사용하여 그룹핑 값 변경 가능 )

• 즉시 렌더링 되지 않기 때문에 ItemsControl의 GroupStyle 프로퍼티
 정의 ( HeaderTemplate )

• GroupStyle.Default 프로퍼티 사용 가능

• 데이터 템플릿 생성 시 CollectionViewGroup 객체가 데이터 컨텍스트
 로 연결됨.
컬렉션 뷰 - 필터링
• 데이터에서 조건을 기준으로 하위집합만 표시

• Predicate<object> 타입의 Filter 프로퍼티 사용.

• Predicate<object> 는 object 를 매개변수로 받고 boolean 을 반환하
 는 델리게이트

• 결과가 true 이면 보이고 false 이면 감춤.
컬렉션 뷰 - 탐색
• ICollectionView 의 CurrentItem 프로퍼티와 CureentPostion 프로퍼티
 및 CurrentItem 변경 메소드가 있음.

• Selector 컨트롤의 IsSynchronizedWithCurrentItem 프로퍼티가 true
 인 경우만 변경
사용자 지정 뷰

•   CollectionViewSource

•   동일한 컬렉션에서 새로운 뷰를 생성하여 선택적으로 대상에 적용할 수 있음.
사용자 지정 뷰
사용자 지정 뷰
데이터 프로바이더
• XmlDataProvider

• ObjectDataProvider
XmlDataProvider
• XML 이 어느 곳에 있든 데이터 바인딩할 수 있는 쉬운 방법 제공

• Source 프로퍼티로 로컬파일, 인터넷 리소스 등 어느 곳이든 참조

• XPath와 Path 동시 사용 가능
XmlDataProvider
ObjectDataProvider
• 닷넷 객체를 데이터 소스로 사용.

• 파라미터를 받는 생성자에서 소스 객체를 선언하는 것으로도 인스턴
 스를 만들 수 있음.

• 소스 객체의 메소드에 바인딩 가능.

• 생성자, 메소드에 파라미터 전달.
ObjectDataProvider
                     리소스 사용


                     타입 지정



                     생성자 파라미터




                     메소드




                     메소드 파라미터
비동기 데이터 바인딩
• 바인딩 클래스의 IsAsync 프로퍼티

• 데이터 프로바이더의 IsAsynchronous 프로퍼티

• IsAsynchronous = true : 백그라운드 스레드에서 소스 생성

• IsAsync = true :백그라운드 스레드에서 소스 프로퍼티 호출

• 기본적으로 XmlDataProvider는 true, ObjectDataProvider는 false
바인딩 데이터 유효성
• 데이터가 대상에서 소스로 전달 될 경우 사용
  ( TwoWay, OneWayToSource )

• 바인딩 클래스의 ValidationRules 프로퍼티 사용.

• 두 가지의 형식의 기본제공 ValidationRule 객체이용
  ( ExceptionValidationRule, DataErrorValidationRule )

• 사용자 검증규칙을 이용.
바인딩 데이터 유효성
바인딩 데이터 유효성
유효성 UI 변경
• Validation.ErrorTemplate 프로퍼티

• Validation.HasError 프로퍼티
유효성 UI 변경
참고
• MSDN : http://msdn.microsoft.com/ko-kr/library/ms752347.asp

• 에덤 네이선의 WPF 언리쉬드
데이터 바인딩 ( Binding )
데이터 바인딩 ( Binding )

More Related Content

Viewers also liked

RAD Studio 라이브바인딩 이해하기
RAD Studio 라이브바인딩 이해하기RAD Studio 라이브바인딩 이해하기
RAD Studio 라이브바인딩 이해하기
Devgear
 
Java programming language
Java programming languageJava programming language
Java programming language
Chiwon Song
 
01. 이베이 페이팔 셀러 회원 등록 slide
01. 이베이 페이팔 셀러 회원 등록 slide01. 이베이 페이팔 셀러 회원 등록 slide
01. 이베이 페이팔 셀러 회원 등록 slideJong Lee
 
Java start01 in 2hours
Java start01 in 2hoursJava start01 in 2hours
Java start01 in 2hours
Kenu, GwangNam Heo
 
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
cranbe95
 
[Spring Camp 2013] Java Configuration 없인 못살아!
[Spring Camp 2013] Java Configuration 없인 못살아![Spring Camp 2013] Java Configuration 없인 못살아!
[Spring Camp 2013] Java Configuration 없인 못살아!
Arawn Park
 
프로그래머가 알아야 하는 메모리 관리 기법
프로그래머가 알아야 하는 메모리 관리 기법프로그래머가 알아야 하는 메모리 관리 기법
프로그래머가 알아야 하는 메모리 관리 기법
중선 곽
 
Simple made easy
Simple made easySimple made easy
Simple made easy
Lee Wei Yeong
 
Open API - 웹 플랫폼 생태계를 만드는 기술 (2011)
Open API - 웹 플랫폼 생태계를 만드는 기술 (2011)Open API - 웹 플랫폼 생태계를 만드는 기술 (2011)
Open API - 웹 플랫폼 생태계를 만드는 기술 (2011)Channy Yun
 
[D2]java 성능에 대한 오해와 편견
[D2]java 성능에 대한 오해와 편견[D2]java 성능에 대한 오해와 편견
[D2]java 성능에 대한 오해와 편견
NAVER D2
 
ReactJS | 서버와 클라이어트에서 동시에 사용하는
ReactJS | 서버와 클라이어트에서 동시에 사용하는ReactJS | 서버와 클라이어트에서 동시에 사용하는
ReactJS | 서버와 클라이어트에서 동시에 사용하는
Taegon Kim
 
[오픈소스컨설팅]Java Performance Tuning
[오픈소스컨설팅]Java Performance Tuning[오픈소스컨설팅]Java Performance Tuning
[오픈소스컨설팅]Java Performance Tuning
Ji-Woong Choi
 

Viewers also liked (12)

RAD Studio 라이브바인딩 이해하기
RAD Studio 라이브바인딩 이해하기RAD Studio 라이브바인딩 이해하기
RAD Studio 라이브바인딩 이해하기
 
Java programming language
Java programming languageJava programming language
Java programming language
 
01. 이베이 페이팔 셀러 회원 등록 slide
01. 이베이 페이팔 셀러 회원 등록 slide01. 이베이 페이팔 셀러 회원 등록 slide
01. 이베이 페이팔 셀러 회원 등록 slide
 
Java start01 in 2hours
Java start01 in 2hoursJava start01 in 2hours
Java start01 in 2hours
 
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
 
[Spring Camp 2013] Java Configuration 없인 못살아!
[Spring Camp 2013] Java Configuration 없인 못살아![Spring Camp 2013] Java Configuration 없인 못살아!
[Spring Camp 2013] Java Configuration 없인 못살아!
 
프로그래머가 알아야 하는 메모리 관리 기법
프로그래머가 알아야 하는 메모리 관리 기법프로그래머가 알아야 하는 메모리 관리 기법
프로그래머가 알아야 하는 메모리 관리 기법
 
Simple made easy
Simple made easySimple made easy
Simple made easy
 
Open API - 웹 플랫폼 생태계를 만드는 기술 (2011)
Open API - 웹 플랫폼 생태계를 만드는 기술 (2011)Open API - 웹 플랫폼 생태계를 만드는 기술 (2011)
Open API - 웹 플랫폼 생태계를 만드는 기술 (2011)
 
[D2]java 성능에 대한 오해와 편견
[D2]java 성능에 대한 오해와 편견[D2]java 성능에 대한 오해와 편견
[D2]java 성능에 대한 오해와 편견
 
ReactJS | 서버와 클라이어트에서 동시에 사용하는
ReactJS | 서버와 클라이어트에서 동시에 사용하는ReactJS | 서버와 클라이어트에서 동시에 사용하는
ReactJS | 서버와 클라이어트에서 동시에 사용하는
 
[오픈소스컨설팅]Java Performance Tuning
[오픈소스컨설팅]Java Performance Tuning[오픈소스컨설팅]Java Performance Tuning
[오픈소스컨설팅]Java Performance Tuning
 

Similar to 데이터 바인딩 ( Binding )

[스프링 스터디 2일차] IoC 컨테이너와 DI
[스프링 스터디 2일차] IoC 컨테이너와 DI[스프링 스터디 2일차] IoC 컨테이너와 DI
[스프링 스터디 2일차] IoC 컨테이너와 DI
AnselmKim
 
Proxy, chain of responsibility, command pattern
Proxy, chain of responsibility, command patternProxy, chain of responsibility, command pattern
Proxy, chain of responsibility, command pattern
YoonJong Choi
 
Introduction to Web Components
Introduction to Web ComponentsIntroduction to Web Components
Introduction to Web Components
EunYoung Kim
 
DDD Repository
DDD RepositoryDDD Repository
DDD Repository
HyeonSeok Choi
 
Javascript 객체생성패턴
Javascript 객체생성패턴Javascript 객체생성패턴
Javascript 객체생성패턴KIM HEE JAE
 
Hibernate 기초
Hibernate 기초Hibernate 기초
Hibernate 기초
Jong Woo Rhee
 
2.Spring IoC & DI (ioc container)
2.Spring IoC & DI (ioc container)2.Spring IoC & DI (ioc container)
(자바교육/스프링교육/스프링프레임워크교육/마이바티스교육추천)#2.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
(자바교육/스프링교육/스프링프레임워크교육/마이바티스교육추천)#2.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)(자바교육/스프링교육/스프링프레임워크교육/마이바티스교육추천)#2.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
(자바교육/스프링교육/스프링프레임워크교육/마이바티스교육추천)#2.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PHP에서 객체와 데이터 연결 유지
PHP에서 객체와 데이터 연결 유지PHP에서 객체와 데이터 연결 유지
PHP에서 객체와 데이터 연결 유지
Yoonwhan Lee
 
[스프링 스터디 1일차] 오브젝트와 의존관계
[스프링 스터디 1일차] 오브젝트와 의존관계[스프링 스터디 1일차] 오브젝트와 의존관계
[스프링 스터디 1일차] 오브젝트와 의존관계
AnselmKim
 
9 object class
9 object class9 object class
9 object class웅식 전
 
[Study]HeadFirst JSP&servlet chapter5
[Study]HeadFirst JSP&servlet chapter5[Study]HeadFirst JSP&servlet chapter5
[Study]HeadFirst JSP&servlet chapter5
Hyeonseok Yang
 
객체지향 프로그래밍 기본
객체지향 프로그래밍 기본객체지향 프로그래밍 기본
객체지향 프로그래밍 기본
용호 최
 
자바스크립트 프로토타입 및 클래스
자바스크립트 프로토타입 및 클래스자바스크립트 프로토타입 및 클래스
자바스크립트 프로토타입 및 클래스
Lee Dong Wook
 
Restful web service
Restful web serviceRestful web service
Restful web service
sunguen lee
 
Ksug2015 - JPA2, JPA 기초와매핑
Ksug2015 - JPA2, JPA 기초와매핑Ksug2015 - JPA2, JPA 기초와매핑
Ksug2015 - JPA2, JPA 기초와매핑
Younghan Kim
 
DDD Start Ch#3
DDD Start Ch#3DDD Start Ch#3
DDD Start Ch#3
HyeonSeok Choi
 
Design Pattern 3
Design Pattern 3Design Pattern 3
Design Pattern 3
Daniel Lim
 
Sql 중심 코드 탈피
Sql 중심 코드 탈피Sql 중심 코드 탈피
Sql 중심 코드 탈피
ssuser776e2d
 

Similar to 데이터 바인딩 ( Binding ) (20)

[스프링 스터디 2일차] IoC 컨테이너와 DI
[스프링 스터디 2일차] IoC 컨테이너와 DI[스프링 스터디 2일차] IoC 컨테이너와 DI
[스프링 스터디 2일차] IoC 컨테이너와 DI
 
Proxy, chain of responsibility, command pattern
Proxy, chain of responsibility, command patternProxy, chain of responsibility, command pattern
Proxy, chain of responsibility, command pattern
 
Introduction to Web Components
Introduction to Web ComponentsIntroduction to Web Components
Introduction to Web Components
 
CouchDB - Introduction - Korean
CouchDB - Introduction - KoreanCouchDB - Introduction - Korean
CouchDB - Introduction - Korean
 
DDD Repository
DDD RepositoryDDD Repository
DDD Repository
 
Javascript 객체생성패턴
Javascript 객체생성패턴Javascript 객체생성패턴
Javascript 객체생성패턴
 
Hibernate 기초
Hibernate 기초Hibernate 기초
Hibernate 기초
 
2.Spring IoC & DI (ioc container)
2.Spring IoC & DI (ioc container)2.Spring IoC & DI (ioc container)
2.Spring IoC & DI (ioc container)
 
(자바교육/스프링교육/스프링프레임워크교육/마이바티스교육추천)#2.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
(자바교육/스프링교육/스프링프레임워크교육/마이바티스교육추천)#2.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)(자바교육/스프링교육/스프링프레임워크교육/마이바티스교육추천)#2.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
(자바교육/스프링교육/스프링프레임워크교육/마이바티스교육추천)#2.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
 
PHP에서 객체와 데이터 연결 유지
PHP에서 객체와 데이터 연결 유지PHP에서 객체와 데이터 연결 유지
PHP에서 객체와 데이터 연결 유지
 
[스프링 스터디 1일차] 오브젝트와 의존관계
[스프링 스터디 1일차] 오브젝트와 의존관계[스프링 스터디 1일차] 오브젝트와 의존관계
[스프링 스터디 1일차] 오브젝트와 의존관계
 
9 object class
9 object class9 object class
9 object class
 
[Study]HeadFirst JSP&servlet chapter5
[Study]HeadFirst JSP&servlet chapter5[Study]HeadFirst JSP&servlet chapter5
[Study]HeadFirst JSP&servlet chapter5
 
객체지향 프로그래밍 기본
객체지향 프로그래밍 기본객체지향 프로그래밍 기본
객체지향 프로그래밍 기본
 
자바스크립트 프로토타입 및 클래스
자바스크립트 프로토타입 및 클래스자바스크립트 프로토타입 및 클래스
자바스크립트 프로토타입 및 클래스
 
Restful web service
Restful web serviceRestful web service
Restful web service
 
Ksug2015 - JPA2, JPA 기초와매핑
Ksug2015 - JPA2, JPA 기초와매핑Ksug2015 - JPA2, JPA 기초와매핑
Ksug2015 - JPA2, JPA 기초와매핑
 
DDD Start Ch#3
DDD Start Ch#3DDD Start Ch#3
DDD Start Ch#3
 
Design Pattern 3
Design Pattern 3Design Pattern 3
Design Pattern 3
 
Sql 중심 코드 탈피
Sql 중심 코드 탈피Sql 중심 코드 탈피
Sql 중심 코드 탈피
 

데이터 바인딩 ( Binding )

  • 1. CODE SHOP 데이터 바인딩 Data Binding 2012. 07. 08 김대열
  • 2. • 개념 • 바인딩 클래스 • 바인딩 설정 • 데이터 템플릿 • 데이터 변환 • MultiBinding • MultiConverter • 바인딩 경로 • 컬렉션 바인딩 • 데이터 프로바이더 • 바인딩 데이터 유효성
  • 3. 바인딩이란 • 응용 프로그램 UI와 비즈니스 논리를 서로 연결하는 프로세스. ( MSDN ) • 데이터 : 객체, XML 파일, 웹 서비스, 데이터 베이스, 버튼 같은 WPF 요 소 등. • 대상 요소와 데이터를 연결 하는 것. UI DATA
  • 4. 바인딩의 이점 • 코드 양의 감소. • 데이터의 유연한 UI 표현 • 비즈니스 로직과 UI의 분리 • MVVM 패턴의 기본 요소
  • 5. 구성요소 바인딩 대상 ( Target ) 바인딩 소스 ( Source ) 객체 객체 ( Dependency Object ) ( Object ) 종속성 속성 속성 Binding ( Dependency Property ) ( Property ) 4가지 필수 요소 - 대상 객체 : DependencyObject 에서 파생한 객체 - 대상 속성 : 종속성 속성 ( 읽기 전용 제외 ) - 소스 객체 - 소스 속성
  • 6. 데이터 흐름 바인딩 대상 ( Target ) 바인딩 소스 ( Source ) Dependency Object One Way Object Two Way 종속성 속성 속성 OneWayToSource ( Dependency Property ) ( Property ) OneTime - OneWay : 소스가 변경될 때마다 타깃이 갱신. ( 단방향 ) - TwoWay : 대상이나 소스가 변경되면 서로 갱신. ( 양방향 ) - OneWayToSource : 대상이 변경될 때마다 소스가 갱신. ( OneWay 역방향 ) - OneTime : 대상 속성은 바인딩 클래스가 인스턴스화 될 때, 한번만 적용되며 이 후 소스가 변경되어도 반영되지 않음.
  • 7. 소스 업데이트 시점 바인딩 대상 ( Target ) 바인딩 소스 ( Source ) Dependency Object Object UpdateSourceTrigger 종속성 속성 Two Way 속성 ( Dependency Property ) ( Property ) OneWayToSource - PropertyChanged : 대상 속성이 변경되는 즉시 갱신. - LostFocus : 대상 속성의 값이 변경되고 대상 요소가 포커스를 읽었 을 때 갱신. - Explicit : 사용자가 직접 갱신. ( BindingExpression.UpdateSource )
  • 8. 바인딩 클래스 • System.Windows.Data.Binding • 두 개의 속성을 이용해 채널을 연결 • 마크업 확장식 클래스 • BindingExpression : 소스와 대상사이의 연결을 유지관리 하는 클래스 • BindingOperations : 바인딩 객체들을 참조하여 조작하는 정적메소드를 제공.
  • 9. 바인딩 클래스 – 설정 / 제거 메소드 • SetBinding : FrameworkElement, FrameworkContentElement 상속 메소드 • BindingOperations.SetBinding : FrameworkElement, FrameworkContentElement 객체가 아니어도 DependencyObject 객체면 바인딩 할 수 있음. • BindingOperations.ClearBinding : 한 개의 바인딩 된 속성 제거. • BindingOperations.ClearAllBindings : 대상 객체가 한 개 이상의 바인딩이 되어 있을 경우 모두 제거.
  • 10. 바인딩 설정 소스 객체 ( Source ) 소스 속성 ( Property ) 대상 객체 ( Target ) 대상 속성 ( Dependency Property )
  • 11. 바인딩 설정 < ElementName > 바인딩 클래스는 Path 프로퍼티를 사용하는 생성자가 있기 때문에 명시적으로 프로퍼티를 사용하지 않을 수 있다.
  • 12. 바인딩 설정 < DataContext > < Source > Source 프로퍼티를 사용하려면 대상 객체가 ResourceDictionary에 리소스로 정의되어야 한다.
  • 13. 바인딩 설정 < RelativeSource > ElementName, Source, RelativeSource 중 하나만 설정 가능.
  • 14. RelativeSource 바인딩 대상의 위치에 상대적인 위치를 지정하여 바인딩 소스를 가져오거나 설정. ( 컨트롤 템플릿에 사용하기 유용 ) - { Binding RelativeSource={ RelativeSource Self } } : 소스 객체와 대상 객체가 동일 - { Binding RelativeSource={ RelativeSource TemplateParent } } : 소스 객체와 대상 객체의 TemplateParent를 동일 - { Binding RelativeSource={ RelativeSource FindAncestor, AncestorType={ x:Type desiredType } } } : 소스 객체와 주어진 타입에 가장 근접한 부모 객체를 동일 - { Binding RelativeSource={ RelativeSource FindAncestor, AncestorLevel=n, AnsestorType={ x:Type desiredType } } } : 소스 객체와 주어진 타입에 n 번째 가까운 부모 객체와 동일 - { Binding RelativeSource={ RelativeSource PreviousData } } : 소스 객체와 데이터 바인딩된 컬렉션의 이전 데이터와 동일
  • 15. 바인딩 고려사항 • 단순 프로퍼티를 소스 프로퍼티로 사용할 경우, 변경통보가 일어나지 않기 때문에 소스 객체의 속성이 변경되어도 갱신되지 않음. • INotifyPropertyChanged 인터페이스를 구현하여 해결 함. • 소스 프로퍼티는 닷넷 객체의 어떤 프로퍼티도 사용할 수 있지만 단 순한 필드가 아닌 실제 프로퍼티여야 하며, 대상 객체의 프로퍼티는 반드시 의존 프로퍼티여야 함.
  • 16. Data Template 대상 객체에 바인딩 된 데이터를 시각적으로 표현
  • 17. 데이터 변환 • 소스의 값을 변경하여 대상에 전달할 수 있음. • 서로 다른 타입의 소스와 대상을 사용할 경우 유용함. • IValueConverter 인터페이스 구현 • 멀티 바인딩 사용시 IMultiValueConverter 사용 바인딩 대상 ( Target ) 바인딩 소스 ( Source ) Dependency Object Object 종속성 속성 데이터 변환 속성 ( Dependency Property ) ( Property )
  • 18. 데이터 변환 바인딩 대상 ( Target ) 바인딩 소스 ( Source ) Label Slider 데이터 변환 Content Value
  • 19. 데이터 변환 - IValueConverter < Source -> Target > < Target -> Source >
  • 20. MultiBinding • 대상 객체에 여러 개의 소스를 바인딩 할 경우 사용. • 입력되는 여러 타입의 데이터 처리를 위해 멀티 컨버터를 사용해야 함. 바인딩 소스 ( Source ) Object 바인딩 대상 ( Target ) 속성 ( Property ) Dependency Object 바인딩 소스 ( Source ) Object 종속성 속성 데이터 변환 속성 ( Dependency Property ) ( IMultiValueConverter ) ( Property ) 바인딩 소스 ( Source ) Object 속성 ( Property ) . . n
  • 22. 데이터 변환 - IMultiValueConverter
  • 23. ProirityBinding • 다수의 바인딩 객체를 사용한다는 점에서 MultiBinding 과 유사하나 대상 객체의 값 설정을 위해 객체들을 경쟁시킴. • 바인딩의 우선순위는 목록 순서이며, 목록의 첫 번째 부터 마지막까 지 바인딩을 진행하며 성공여부 확인. • 데이터 소스와 바인딩이 오래 걸릴 경우 대기하는 동안 빠른 바인딩 을 먼저 처리하여 보여줌. • 우선순위가 높은 바인딩이 성공하면 현재 값으로 대체.
  • 24. 바인딩 경로 • Path=Main.Sub : 하위속성 지정 • Path=Index[0] : 인덱서 적용, 중첩가능 • Path=Name[First, Last] : 인덱서, 하위 속성 • Path=/ : 소스가 컬렉션 뷰인 경우 현재 항목지정 • Path=/Root/Sub : 속성 이름과 슬래시를 결합하여 컬렉션 속성을 이동 • Path=“[(sys:Int32)42, (sys:Int32)24]” : 매개변수 형식은 괄호 안에 지정 • 마침표(.) 경로는 현재 소스와 바인딩 • Text={ Binding }은 Text={ Binding Path=. } 와 같음.
  • 25. 컬렉션 바인딩 • 일반적으로 ItemsControl의 ItemsSource 속성과 바인딩. • ListBox, ListView, TreeView 등. • IEnumerable 인터페이스를 구현한 컬렉션 • 변경 알림을 위해서는 INotifyCollectionChanged 인터페이스 구현 ( 삽입, 삭제 ) • ObservableCollection<T> : INotifyCollectionChanged 인터페이스를 기본으로 구현한 클래스
  • 26. 컬렉션 뷰 • 컬렉션을 바인딩 시 기본 뷰가 대상과 소스 사이에 암시적으로 추가. • ICollectionView는 기본 컬렉션의 자체 변경없이 정렬, 그룹핑, 필터링, 탐색 기능을 사용할 수 있는 바인딩 소스 컬렉션의 최상위 계층. • 현재 항목에 대한 포인터 유지 관리. • CollectionViewSource.GetDefalutView 메소드로 컬렉션의 기본 뷰를 반환
  • 27. 컬렉션 뷰 - 정렬 • ICollectionView 인터페이스의 SortDescriptions 프로퍼티 사용 • 동시에 여러 프로퍼티 정렬 가능. ( 목록 순으로 우선순위 설정 ) • ListSortDirection 열거형으로 방향 설정 • SortDescriptions.Clear 로 제거
  • 28. 컬렉션 뷰 - 그룹핑 • ICollectionView 인터페이스의 GropDescriptions 프로퍼티 사용. • PropertyGroupDescription 객체를 추가 ( 밸류 컨버터를 사용하여 그룹핑 값 변경 가능 ) • 즉시 렌더링 되지 않기 때문에 ItemsControl의 GroupStyle 프로퍼티 정의 ( HeaderTemplate ) • GroupStyle.Default 프로퍼티 사용 가능 • 데이터 템플릿 생성 시 CollectionViewGroup 객체가 데이터 컨텍스트 로 연결됨.
  • 29. 컬렉션 뷰 - 필터링 • 데이터에서 조건을 기준으로 하위집합만 표시 • Predicate<object> 타입의 Filter 프로퍼티 사용. • Predicate<object> 는 object 를 매개변수로 받고 boolean 을 반환하 는 델리게이트 • 결과가 true 이면 보이고 false 이면 감춤.
  • 30. 컬렉션 뷰 - 탐색 • ICollectionView 의 CurrentItem 프로퍼티와 CureentPostion 프로퍼티 및 CurrentItem 변경 메소드가 있음. • Selector 컨트롤의 IsSynchronizedWithCurrentItem 프로퍼티가 true 인 경우만 변경
  • 31. 사용자 지정 뷰 • CollectionViewSource • 동일한 컬렉션에서 새로운 뷰를 생성하여 선택적으로 대상에 적용할 수 있음.
  • 35. XmlDataProvider • XML 이 어느 곳에 있든 데이터 바인딩할 수 있는 쉬운 방법 제공 • Source 프로퍼티로 로컬파일, 인터넷 리소스 등 어느 곳이든 참조 • XPath와 Path 동시 사용 가능
  • 37. ObjectDataProvider • 닷넷 객체를 데이터 소스로 사용. • 파라미터를 받는 생성자에서 소스 객체를 선언하는 것으로도 인스턴 스를 만들 수 있음. • 소스 객체의 메소드에 바인딩 가능. • 생성자, 메소드에 파라미터 전달.
  • 38. ObjectDataProvider 리소스 사용 타입 지정 생성자 파라미터 메소드 메소드 파라미터
  • 39. 비동기 데이터 바인딩 • 바인딩 클래스의 IsAsync 프로퍼티 • 데이터 프로바이더의 IsAsynchronous 프로퍼티 • IsAsynchronous = true : 백그라운드 스레드에서 소스 생성 • IsAsync = true :백그라운드 스레드에서 소스 프로퍼티 호출 • 기본적으로 XmlDataProvider는 true, ObjectDataProvider는 false
  • 40. 바인딩 데이터 유효성 • 데이터가 대상에서 소스로 전달 될 경우 사용 ( TwoWay, OneWayToSource ) • 바인딩 클래스의 ValidationRules 프로퍼티 사용. • 두 가지의 형식의 기본제공 ValidationRule 객체이용 ( ExceptionValidationRule, DataErrorValidationRule ) • 사용자 검증규칙을 이용.
  • 43. 유효성 UI 변경 • Validation.ErrorTemplate 프로퍼티 • Validation.HasError 프로퍼티
  • 45. 참고 • MSDN : http://msdn.microsoft.com/ko-kr/library/ms752347.asp • 에덤 네이선의 WPF 언리쉬드