source

Observable Collection과 Binding List의 차이

lovecheck 2023. 4. 17. 21:59
반응형

Observable Collection과 Binding List의 차이

에 대해 ObservableCollection ★★★★★★★★★★★★★★★★★」BindingList소스 추가/삭제 변경을 통지하기 위해 두 가지 방법을 모두 사용했지만, 실제로 어느 쪽이 더 좋은지 모르겠습니다.

내가 왜 다음 중 하나를 택하겠어?

ObservableCollection<Employee> lstEmp = new ObservableCollection<Employee>();

또는

BindingList<Employee> lstEmp = new BindingList<Employee>();

ObservableCollection다른 컬렉션과 마찬가지로 UI에서 업데이트할 수 있습니다.진정한 차이는 비교적 간단합니다.

ObservableCollection<T>를 실장하다INotifyCollectionChanged되었을 때 ). 할 수 . UI를 사용하다ObservableCollection갱신되었습니다.

★★★★★★★★★★★★★★.BindingList<T>를 실장하다IBindingList.

IBindingList는 수집 변경에 대한 알림을 제공하지만 그것뿐만이 아닙니다.다음과 같은 변경에 따른 UI 업데이트보다 훨씬 더 많은 기능을 UI에서 사용할 수 있는 다양한 기능을 제공합니다.

  • 정렬
  • 검색 중
  • 공장에서 추가(AddNew 멤버 기능)
  • 읽기 전용 목록(CanEdit 속성)

에서 할 수 .ObservableCollection<T>

또 다른 차이점은BindingList이 실장되었을 때 합니다.INotifyPropertyChanged하는 .PropertyChanged,BindingList그것을 받을 것이고, 인상될 것이다.ListChangedEventListChangedType.ItemChanged ★★★★★★★★★★★★★★★★★」OldIndex=NewIndex,OldIndex=-1ObservableCollection는 항목 알림을 릴레이하지 않습니다.

Silverlight Silverlight 。BindingList할 수 ., ,는 할 수 .ObservableCollection §ICollectionView (그리고)IPagedCollectionView★★★★★★★★★★★★★★★★★★★★★★★★★)

실제적인 차이점은 Binding List는 WinForms용이고 Observable Collection은 WPF용이라는 것입니다.

WPF의 관점에서 Binding List는 적절하게 지원되지 않으며 실제로 필요한 경우를 제외하고는 WPF 프로젝트에서 실제로 Binding List를 사용하지 않습니다.

포함된 요소에 대한 기능 및 변경 알림과 같은 가장 중요한 차이점은 이미 승인된 답변에 의해 언급되었지만, 더 많이 언급할 필요가 있습니다.

성능

AddNew라고 합니다.BindingList<T>는 추가된 하기 위해 을 합니다.IndexOf찾다.그리고 만약T를 실장하다INotifyPropertyChanged변경된 요소의 인덱스는 또한 검색됩니다.IndexOf(단, 같은 항목이 반복적으로 변경되는 한 새로운 조회는 없습니다).하면 " " " " " " " " " " "ObservableCollection<T>( ( ())IBindingListO(1) 룩업 비용)을 사용한 구현이 더 바람직할 수 있습니다.

완전성

  • IBindingListinterface는 큰 크기(가장 깨끗한 디자인은 아닐 수 있음)로 구현자는 기능의 서브셋만 구현할 수 있습니다.를 들면, 「」는,AllowNew,SupportsSorting ★★★★★★★★★★★★★★★★★」SupportsSearching은 성질을 알 수 있다.AddNew,ApplySort ★★★★★★★★★★★★★★★★★」Find각각 메서드를 사용할 수 있습니다.라는 것은 종종 사람들을 놀라게 한다BindingList<T>그 자체는 정렬을 지원하지 않습니다.실제로 파생 클래스에서 누락된 기능을 추가할 수 있는 몇 가지 가상 메서드를 제공합니다.DataView는 풀클래스의 입니다.IBindingList구현. 단, 애초에 타이핑된 컬렉션에는 해당되지 않습니다. ★★★★★★★★★★★★★★★★.BindingSource는 다른 를 IBindingList- - 렬 지 다 다 다 다 다 다 다 다 。

  • ObservableCollection<T>는 이미 입니다.INotifyCollectionChangedinterface( 「 1 )가상 만, 「 」ObservableCollection<T>됩니다.Collection<T>class: 추가/ 모델를 커스터마이즈하기 위한 입니다.class: 제제제제제제 / 제(((((((((( ( : ((( collect class class class class class class class class class class ) 。

복사 vs. 래핑

다.ObservableCollection<T> ★★★★★★★★★★★★★★★★★」BindingList<T>이미 존재하는 목록을 받아들이는 생성자가 있습니다.다른 컬렉션에 의해 인스턴스화된 경우 동작은 다르지만 다음과 같습니다.

  • BindingList<T>지정된 목록에 대해 관찰 가능한 래퍼로 기능하며 에서 수행된 변경은BindingList<T>이치노
  • ObservableCollection<T> 한편으로 새로운 을 전하다List<T> base " " " " " " "Collection<T>원래 컬렉션의 요소를 이 새 목록에 복사합니다. 만약 론,, 약 of약T는 요소의 참조 유형 변경을 원래 컬렉션에서 볼 수 있지만 컬렉션 자체는 업데이트되지 않습니다.

하나의 큰 차이점ObservableCollection ★★★★★★★★★★★★★★★★★」BindingList이 될 수.

BindingList'이것'은 다음과 같습니다.

Binding List 목록 변경

ObservableCollection다음 중 하나:

Overable Collection 컬렉션이 변경되었습니다.

위 개요: 아이템의 속성이 변경된 경우BindingList , . . . . . . . .ListChanged및 PropertyDescriptor에 대한 됩니다.ObservableCollection사실은요.ObservableCollection는 항목에서 변경된 속성에 대한 변경 이벤트를 발생시키지 않습니다.

은 상상결 above 에 관한 것입니다.INotifyPropertyChanged이치노기본적으로 항목에서 속성이 변경되면 변경된 이벤트를 발생시키지 않습니다.

둘 다 발견하는 데 시간이 걸리는 장점과 단점이 있습니다.

Binding List에 문제가 있었습니다.변경 알림 이벤트는 아이템이 삭제된 후에만 발생하며 인덱스만 제공되기 때문입니다(즉, 삭제 후 메커니즘을 구현한 경우 어떤 오브젝트가 어떤 위치에 있는지 추적해야 합니다).한편, Observable Collection 에서는 삭제된 항목의 목록이 표시됩니다.

BindingList에는 파생 클래스가 공장 패턴을 구현할 수 있는 편리한 AddNew() 메서드가 있습니다.예를 들어 부모 컬렉션에 따라 새로운 아이템을 값으로 초기화할 수 있습니다(예를 들어 컬렉션에 자녀 아이템이 포함되어 있는 경우 부모에 대한 외부 키).

또한 (Entity Framework의 ToBindingList 확장을 사용하여) ObservableCollection에서 BindingList를 쉽게 얻을 수 있으며 반환된 (파생된) BindingList는 플레인 바닐라에는 없는 정렬 등의 기능을 구현합니다.

언급URL : https://stackoverflow.com/questions/4284663/difference-between-observablecollection-and-bindinglist

반응형