我正在制作一个wpf程序,它能够使用DataGrid循环将for中的行一个接一个地涂成红色,我遇到了一些奇怪的事情。如果DataGrid包含来自数据库表的40多行数据,则它不会为所有行上色。
这是我正在使用的代码。

private void Red_Click(object sender, RoutedEventArgs e)
{
    for (int i = 0; i < dataGrid1.Items.Count; i++)
    {
        DataGridRow row = (DataGridRow)dataGrid1.ItemContainerGenerator.ContainerFromIndex(i);
        if (row != null)
        {
            row.Background = Brushes.Red;
        }
    }
}

有没有其他方法可以通过其他方法逐个给行上色,或者这是wpftoolkit中的某种错误?

最佳答案

如果要为每行定义颜色,并且对行显示的项具有属性,则可以使用itemsContainerStyle设置行颜色。在下面的示例中,在网格中的项上有一个名为itemcolour的属性,该属性将定义背景行颜色。绑定从行绑定到该行包含的项。

 <dg:DataGrid.ItemContainerStyle>
    <Style
       TargetType="{x:Type dg:DataGridRow}"
       BasedOn="{StaticResource {x:Type dg:DataGridRow}}">
       <Setter
          Property="Background"
          Value="{Binding ItemColour}" />
    </Style>
 </dg:DataGrid.ItemContainerStyle>

但您可能不希望在您的项目上使用属性itemcolour,因为它们可能是您的业务模型。这就是viewmodel进入自身的地方。您定义了一个中间层,它基于一些自定义逻辑包装您的业务层和itemcolour属性。

10-08 19:41