我正在制作一个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属性。