ICollectionView 또는 ObservableCollection에 바인딩해야 합니까?
묶을 경우DataGrid
에게
ICollectionView = CollectionViewSource.GetDefaultView(collection)
또는 에
ObservableCollection<T> collection;
???
MVVM에 대한 모범 사례는 무엇이며 그 이유는 무엇입니까?
당신은 항상 당신과 결합합니다.ICollectionView
당신이 그것을 명시하든 아니든.
우리가 가지고 있다고 가정합니다.
var collection = new ObservableCollection<string>();
var collectionView = CollectionViewSource.GetDefaultView(collection);
이 경우 바인딩:collection
또는 로collectionView
이 하나이며 동일합니다. 바인딩 엔진은 기본 컬렉션 뷰에 바인딩됩니다(참조는 다음과 같습니다).collectionView
에 바인딩하라고 하면collection
.
이것은 당신의 질문에 대한 대답이 "그것은 전혀 차이가 없다"라는 것을 의미합니다.
컬렉션에 직접 바인딩하더라도 바인딩 엔진은 기본 보기에 바인딩됩니다.정렬 기준과 같은 보기 속성을 수정하면 컬렉션에 직접 바인딩되는 것처럼 보이는 바인딩에 영향을 줍니다. 표지 뒤에서는 기본 뷰에 바인딩되기 때문입니다.
그러나 다른 흥미롭고 관련된 질문이 있습니다. 기본 컬렉션 뷰(즉, 기본 뷰에 명시적으로 바인딩할 이유가 없기 때문에 컬렉션 자체에 바인딩해야 합니까?) 또는 동일한 컬렉션의 다른 뷰에 바인딩해야 합니까?
각 뷰에는 현재 항목, 정렬 기준 등에 대한 고유한 개념이 있으므로 동일한 컬렉션에 대한 바인딩이 여러 개 있고 바인딩된 컨트롤에 현재 항목, 필터 및 회사에 대한 별개의 개념이 필요한 경우 동일한 기본 컬렉션의 여러 뷰에 명시적으로 바인딩해야 합니다.
ObservableCollection<T>
도구들INotifyCollectionChanged
컬렉션의 항목이 변경되면 UI에 알립니다.
ICollectionView
에서는 전파 외에도 수집을 필터링, 정렬 또는 그룹화할 수 있습니다.INotifyCollectionChanged
이벤트를 생성할 수 있습니다.
MVVM에 바인딩하는 한 두 유형 모두 MVVM에서 잘 작동합니다.사용하다ICollectionView
정렬, 필터링 또는 그룹화가 필요한 경우.사용하다ObservableCollection<T>
당신이 하지 않을 때 직접.
존이 한 말을 덧붙이자면요주요 차이점은 다음과 같습니다.CollectionViewSource.GetDefaultView(collection)
View Model을 WPF에 종속되도록 만들고 있습니다.많은 MVVM 순수주의자들은 이를 좋아하지 않으며 이는 관찰 가능한 컬렉션만 유효한 옵션으로 남습니다.
다른 옵션은 을 사용하는 것입니다.ICollectionView
클래스를 사용하여 이를 구현하지만 WPF 자체의 일부는 아닙니다.
저는 그렇게 생각하지 않습니다.MVVM
그 자체로 ICollectionView
에서는 그룹 합니다. 사용할 수 있습니다.IColectionView
그렇지 않으면 간단히 사용합니다.ObservableCollection
그리드에서 뷰에 적용된 설정(예: 필터링)을 표시하려면 뷰에 바인딩하고, 그렇지 않으면 뷰가 중복됩니다.
언급URL : https://stackoverflow.com/questions/6317860/should-i-bind-to-icollectionview-or-observablecollection
'programing' 카테고리의 다른 글
MongoDB 컬렉션의 모든 문서에서 키 값을 합계하는 방법 (0) | 2023.05.05 |
---|---|
dyld: 라이브러리가 로드되지 않음: @rpath/libswift_stdlib_core.dylib (0) | 2023.05.05 |
String의 차이점은 무엇입니까?비어 있고 "(빈 문자열)? (0) | 2023.05.05 |
Bash 스크립트의 경로에서 파일 이름만 가져옵니다. (0) | 2023.05.05 |
IDITY 열 하나로 테이블에 삽입하는 방법은 무엇입니까? (0) | 2023.05.05 |