2011-08-25 63 views
1

我有一個WPF數據網格綁定到部件列表,我需要交替行顏色。部件也可以是一個組的一部分,在這種情況下整個組需要是相同的顏色。有點像:WPF數據網格中行的背景顏色

Part 1, group 1 - White background 
Part 2, group 2 - Blue background 
Part 3, group 3 - White background 
Part 4, group 3 - White background 
Part 5, group 4 - Blue background 
Part 6, group 4 - Blue background 
Part 7, group 5 - White background 

顏色的交替必須基於羣體,而不是簡單地通過每隔一行。我已經嘗試在源代碼集合更新時在代碼隱藏中使用grid.ItemContainerGenerator,但這不起作用。 ItemContainerGenerator.ContainerFromIndex()此時總是返回null,我想是因爲網格仍在更新,我不知道。我怎樣才能做到這一點?

回答

0

在複雜的情況下(例如顏色表示狀態),我在viewmodel上創建了一個屬性,該屬性根據所需的任何規則返回BackgroundBrush的Color。我通常創建一個靜態實例,爲每個組反覆返回並凍結它,以節約資源。

HTH ...

0

我用RowLoaded/RowUnloaded過去,並使用行爲告知該行的datacontext包含背景行的什麼財產。我發現的問題是綁定行由於某種原因,Background會爬到Grid的DataContext上,而不是使用行。如果您對這種方法感興趣,我可以粘貼我使用的代碼。它確實要求ViewModel或ListViewModel足夠清楚地爲行設置正確的顏色。我經常在ViewModel中關於色彩的圍欄上,但色彩已經成爲商業需求,而不僅僅是苦苦努力。

0

我所做的就是重寫DataGrid類

protected override void PrepareContainerForItemOverride(System.Windows.DependencyObject element, object item) 

的下列事件調用基方法後,您可以設置基礎上,項目變量的值,該行的背景顏色,你可以轉換爲組類並訪問諸如組名等屬性。