我有一个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 :(得分:0)
在复杂场景中(例如颜色表示状态),我在viewmodel上创建一个属性,该属性根据您想要的规则返回BackgroundBrush的Color。我通常创建一个静态实例,我为每个组重复返回,并冻结它,以节省资源。
... HTH
答案 1 :(得分:0)
我过去曾使用RowLoaded / RowUnloaded,并使用行为告诉行datacontext行的哪些属性包含背景。我发现的问题是绑定行Background由于某种原因爬上Grid的DataContext,而不是使用行。如果您对此方法感兴趣,我可以粘贴我使用的代码。它确实要求ViewModel或ListViewModel足够意识到为行设置正确的颜色。在ViewModel中,我经常关注颜色,但颜色已成为商业需求,而不仅仅是苦行僧。
答案 2 :(得分:0)
我所做的是覆盖DataGrid类的以下事件
protected override void PrepareContainerForItemOverride(System.Windows.DependencyObject element, object item)
调用基本方法后,您可以根据 item 变量的值设置行的背景颜色,您可以将其转换为组类和访问属性,例如组名。