使用WPF DataGrid时行颜色无法动态改变问题解决

在使用公司根据DataGrid自定义的控件时,会出现行颜色无法根据绑定值动态改变之前同事是在事件LoadRow中增加判断

 1         private void MetroDataGrid_LoadingRow(object sender, System.Windows.Controls.DataGridRowEventArgs e)
 2         {
 3             DataGridRow row = e.Row;
 4             ClassXXXitem = row.Item as ClassXXX;
 5             if (item != null)
 6             {
 7                 row.Foreground = item.Value!= "1" ? Brushes.Red : Brushes.Black;
 8             }
 9 
10         }

这种方式虽然能够解决问题,但是会导致在滚动显示数据时触发该事件,导致效率下降,之后在网上搜索发现可以使用样式来实现,具体如下:

                <DataGrid>
                    <DataGrid.RowStyle>
                        <Style TargetType="{x:Type DataGridRow}">
                            <Style.Triggers>
                                <DataTrigger Binding="{Binding Value}" Value="Value1">
                                    <Setter Property="Foreground" Value="Black" />
                                </DataTrigger>
                                <DataTrigger Binding="{Binding Value}" Value="Value2">
                                    <Setter Property="Foreground" Value="Red" />
                                </DataTrigger>
                            </Style.Triggers>
                        </Style>
                    </DataGrid.RowStyle>
                    <DataGrid.Columns>
                    </DataGrid.Columns>
                </DataGrid>
View Code

 

posted on 2020-04-29 11:23  鬼火小先生  阅读(691)  评论(0)    收藏  举报

导航