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
그것을 받을 것이고, 인상될 것이다.ListChangedEvent
ListChangedType.ItemChanged
★★★★★★★★★★★★★★★★★」OldIndex=NewIndex
,OldIndex=-1
ObservableCollection
는 항목 알림을 릴레이하지 않습니다.
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>
( ( ())IBindingList
O(1) 룩업 비용)을 사용한 구현이 더 바람직할 수 있습니다.
완전성
IBindingList
interface는 큰 크기(가장 깨끗한 디자인은 아닐 수 있음)로 구현자는 기능의 서브셋만 구현할 수 있습니다.를 들면, 「」는,AllowNew
,SupportsSorting
★★★★★★★★★★★★★★★★★」SupportsSearching
은 성질을 알 수 있다.AddNew
,ApplySort
★★★★★★★★★★★★★★★★★」Find
각각 메서드를 사용할 수 있습니다.라는 것은 종종 사람들을 놀라게 한다BindingList<T>
그 자체는 정렬을 지원하지 않습니다.실제로 파생 클래스에서 누락된 기능을 추가할 수 있는 몇 가지 가상 메서드를 제공합니다.DataView
는 풀클래스의 입니다.IBindingList
구현. 단, 애초에 타이핑된 컬렉션에는 해당되지 않습니다. ★★★★★★★★★★★★★★★★.BindingSource
는 다른 를IBindingList
- - 렬 지 다 다 다 다 다 다 다 다 。ObservableCollection<T>
는 이미 입니다.INotifyCollectionChanged
interface( 「 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
'이것'은 다음과 같습니다.
ObservableCollection
다음 중 하나:
위 개요: 아이템의 속성이 변경된 경우
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
'source' 카테고리의 다른 글
싱글 비트를 설정, 클리어 및 토글하려면 어떻게 해야 합니까? (0) | 2023.04.22 |
---|---|
ASP란?NET Identity의 IUser Security Stamp Store 인터페이스 (0) | 2023.04.22 |
리모트 Git 저장소에 수정된 커밋을 푸시하려면 어떻게 해야 합니까? (0) | 2023.04.17 |
WPF 바인딩을 강제로 새로 고치는 방법 (0) | 2023.04.17 |
sed/grep을 사용하여 두 단어 사이에 텍스트를 추출하는 방법은 무엇입니까? (0) | 2023.04.17 |