2013-07-25 4 views
0

그룹화 된 행이있는 wpf 데이터 격자가 있으며 CollectionViewSource을 사용하여 구현됩니다. 그룹 헤더 템플리트는 CollectionViewGroup 오브젝트에 직접 바인드되는 것으로 보이지만 어떤 이유인지 CVS 내부에서 그다지 액세스 할 수 없습니다. CollectionViewSource에 그룹 이름을 지정하고 CVG 생성을 처리합니다. 그룹 헤더 스타일을 NameItemCount과 같이 CVG가 노출하는 몇 가지 속성 이외의 다른 속성에 바인딩하려면이 작업을 어렵게 만듭니다.WPF DataGrid - 그룹 헤더에 대한 유연한 바인딩

기본적으로 모든 그룹에 Status 속성을 사용하고 그룹 헤더 배경색으로 시각적으로 표시해야합니다. 이 Status이 변경 될 수 있으므로 헤더가 propertychanged 알림을 감지해야합니다. 그러나 CollectionViewGroupStatus 속성이 없으며 CollectionViewSource에 내 CVG를 제공 할 수 없기 때문에이 간단한 작업을 수행하는 방법을 모릅니다.

답변

1

나는 그것을 결국 알아 냈다. Name 속성이 CollectionViewGroup 인 개체이므로 원하는 속성의 그룹보기 모델을 만든 다음 CollectionViewSource에 그룹 설명을 추가 할 때 Name으로 지정할 수 있습니다. 그리고 xaml에서 그룹 머리글 컨트롤에 대해 Name.whatever에 중첩 바인딩을 수행하면됩니다. 이것은 (보다 구체적으로는, 행에 바인더 제본된다는 viewmodels)가 호출 속성에 따라 그룹화 될 모든 행을 의미

Me.BindedCV = New Data.CollectionViewSource 
    Me.BindedCV.GroupDescriptions.Add(New Data.PropertyGroupDescription("ProductGroup")) 

:

난 (vb.net을 따라)과 같이 그것을 설정 ProductGroup. 지금은 CollectionView 그룹 설명을 내 자신의 그룹 개체를 추가

 Dim pg = New ProductGroupVM(pd.Index) 
     Me._ProductGroupVMs.Add(pg) 
     Me.BindedCV.GroupDescriptions(0).GroupNames.Add(pg) 

그래서 GroupNames 컬렉션에 pg를 추가하여 현재 참조하고 XAML 그룹 헤더 스타일링에 바인더 제본 할 수 있다는 것을 의미합니다 - 그것은 Name 개체입니다. 또한 _ProductGroupVMs이라는 두 번째 개인 소장품에 pg을 추가했습니다. 이것은 조금 비현실적이지만 모든 그룹 객체에 대한 참조를 유지할 수 있습니다. 행 뷰 모델을 만들면 ProductGroup 속성이 있고 ProductGroup은 그룹화하기 위해 오른쪽 pg을 가리킬 필요가 있습니다. 바르게. 더 깨끗한 방법이있을 수 있지만 그것이 내가가는 길입니다.

+1

Tekito, 내가 이것을 어제 정렬하려고 시도 할 때 당신에게서 작은 예가있는 것은 예외 일 것입니다. 내 주요 질문은, 당신이 '이름'개체의 어떤 속성에 의해 그룹화하는 데 사용하는 CollectionViewSource 어떻게 말할 것 같아요? – dansan

+1

@ 단산 좋아, 몇 가지 코드를 추가했습니다. 그러나 제 CVS는'Name'의 속성에 의해 그룹화되지 않습니다.이 이름은'Name' 객체 자체를 참조하여 그룹화됩니다. 행의 바인드 된 객체는 모두 자신이 속한'Name' 객체를 가리키는'ProductGroup'이라는 속성을 가지고 있습니다. – Tekito