programing

ICollectionView 또는 ObservableCollection에 바인딩해야 합니까?

telecom 2023. 5. 5. 08:36
반응형

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

반응형