Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF数据网格中行的背景色_Wpf_Mvvm_Datagrid_Background Color - Fatal编程技术网

WPF数据网格中行的背景色

WPF数据网格中行的背景色,wpf,mvvm,datagrid,background-color,Wpf,Mvvm,Datagrid,Background Color,我有一个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

我有一个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
颜色的交替必须基于组,而不仅仅是每隔一行。我曾尝试在更新源集合时在codebehind中使用grid.ItemContainerGenerator,但这不起作用。此时,ItemContainerGenerator.ContainerFromIndex()总是返回null,我想是因为网格仍在更新,我不知道。如何做到这一点?

在复杂的场景中(例如,颜色表示状态),我会在viewmodel上创建一个属性,根据您想要的规则返回背景笔刷的颜色。我通常创建一个静态实例,为每个组重复返回,并将其冻结,以节省资源


HTH…

我过去使用过RowLoaded/rowUnload,并使用行为告诉行datacontext的rows属性包含背景。我发现的问题是,出于某种原因绑定行背景会上升到网格的DataContext,而不是使用行。如果您对这种方法感兴趣,我可以粘贴我使用过的代码。它确实需要ViewModel或ListViewModel有足够的意识为行设置正确的颜色。我经常对ViewModel中的颜色持怀疑态度,但颜色已经成为一种商业需求,而不仅仅是一种苦行僧式的努力

我所做的是覆盖DataGrid类的以下事件

protected override void PrepareContainerForItemOverride(System.Windows.DependencyObject element, object item)
调用base方法后,可以根据item变量的值设置行的背景色,例如,可以将其转换为group类并访问group name等属性