2011-08-25 61 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) 

的下列事件调用基方法后,您可以设置基础上,项目变量的值,该行的背景颜色,你可以转换为组类并访问诸如组名等属性。