RowVirtualization cause incorrect background color for rows

后端 未结 3 827
死守一世寂寞
死守一世寂寞 2020-12-06 22:33

I have a WPF application and there is a Datagrid in some pages. This datagrid needs to load 5000 rows at once (Pagination is not an option for me) and this takes ages. I set

相关标签:
3条回答
  • 2020-12-06 22:53

    Well as Eirik said it might be too late. but i would be glad if it can help others. You can do this EnableRowVirtualization = "True" (so it won't affect your performance in case of large data). And just code this on dgOrders_LoadingRow event.

    private void dgOrders_LoadingRow(object sender, DataGridRowEventArgs e)
    {
    
            OrderDetail item = e.Row.Item as OrderDetail; //parse data into your bject type which is 
            if (item != null)
            {
                 if (item.Note== "Loss") //your condition
                 {
                     e.Row.Background = Brushes.Red;
                 }
                 else                    //otherwise default color
                 {
                     e.Row.Background = Brushes.White;
                 }
            }
        }
    
    0 讨论(0)
  • 2020-12-06 22:59

    As RowVirtualization is not working well for row background coloring, I added a column and colored it instead of whole row.

    0 讨论(0)
  • 2020-12-06 23:05

    This may be a bit too late for you since you apparently found a working solution for you, but hopefully it can help others. I had a similar problem just now and after some googling found out that the reason for this behaviour is that the default value for VirtualizationMode is Recycling. This means that item containers are reused and thus the coloring of the background will stick even if the item that occupies the container after scrolling says it should not be colored.

    To solve this simply set the VirtualizationMode to Standard, like so:

    <DataGrid VirtualizingStackPanel.VirtualizationMode="Standard" />
    

    The containers will then be recreated and destroyed when you scroll, applying any changes you do in the LoadingRow event.

    0 讨论(0)
提交回复
热议问题