WPF数据网格中行的背景色
我有一个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
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等属性