Successfully reported this slideshow.
Your SlideShare is downloading. ×

데이터 바인딩 ( Binding )

Ad

CODE SHOP




데이터 바인딩
Data Binding




               2012. 07. 08
                    김대열

Ad

• 개념

• 바인딩 클래스

• 바인딩 설정

• 데이터 템플릿

• 데이터 변환

• MultiBinding

• MultiConverter

• 바인딩 경로

• 컬렉션 바인딩

• 데이터 프로바이더

• 바인딩 ...

Ad

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

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

• 대상 요...

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Check these out next

1 of 47 Ad
1 of 47 Ad
Advertisement

More Related Content

Advertisement

데이터 바인딩 ( Binding )

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

×