2013-07-25 53 views
0

我有一個wpf數據網格分組行,使用CollectionViewSource實現。看起來組頭模板直接綁定到CollectionViewGroup對象,但由於某些原因,這些在CVS內部並不是很容易訪問。你給了組名稱CollectionViewSource,它處理在幕後生成CVG。如果您希望組標題樣式綁定到除CVG公開的幾個屬性之外的東西,例如NameItemCount,這會使事情變得困難。WPF datagrid - 靈活綁定組標題

基本上,我希望每個組都有一個Status屬性,可能由組頭背景顏色直觀指示。這Status可以改變,所以不知何故標題將不得不檢測propertychanged通知。但由於CollectionViewGroup沒有Status屬性,並且我無法將自己的CVG提供給CollectionViewSource,所以我不知道如何執行此簡單任務。

回答

1

我終於明白了。 CollectionViewGroupName屬性是一個對象,因此您可以創建所需屬性的組視圖模型,然後在將組描述添加到CollectionViewSource時將其作爲Name。然後在xaml中爲組頭控件嵌套綁定到Name.whatever

我設置它像這樣(vb.net遵循):

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

這意味着所有行(更具體地,所述的ViewModels各行綁定到)將根據一個稱爲屬性被分組ProductGroup。現在,我在我自己組對象添加到CollectionView組描述:

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

因此,通過增加pgGroupNames集合意味着它現在可以被引用,並綁定到在XAML組頭造型 - 這是Name對象。請注意,我還將pg添加到我創建的第二個私人收藏_ProductGroupVMs。這有點冒險,但這樣我可以保留對所有組對象的引用 - 當我創建行視圖模型時,它們將具有ProductGroup屬性,並且ProductGroup需要指向右邊的pg以便將它們分組正確。可能有更乾淨的方法來做到這一點,但這是我走的路線。

+1

Tekito,昨天我試圖解決這個問題的時候,有一個小例子可能是個例外。我想我的主要問題是,你如何告訴CollectionViewSource'Name'對象的屬性用於分組? – dansan

+1

@dansan好的,我添加了一些代碼。但是我的'CVS'沒有通過'Name'屬性進行分組 - 它通過引用Name對象本身進行分組。行的綁定對象都有一個名爲'ProductGroup'的屬性,指向它所屬的'Name'對象。 – Tekito