向下滚动/向上滚动后,WPF Datagrid工具箱列无法正确绘制

我有一个WPF MVVM应用程序。在WPF主窗口中,我有一个WPF Datagrid Toolkit。该数据网格具有一些列。根据某些条件(视图模型上绑定的属性),颜色将应用于整个行。此外,还有两个特殊的列。这两个列的类型为DataGridTextColumn,分别称为Date1和Date2。如果Date1的值大于Date2的值,则Date1和Date2单元格都应该用橘红色上色。分别绑定到MyDate1和MyDate2视图模型属性的Date1和Date2的类型为DateTime。


我的问题是:首先,当datagrid加载数据时,行以及Date1和Date2列的颜色正确。由于“日期1”>“日期2”,出现了一些行,“日期1”和“日期2”用橘红色涂成彩色。然后,如果我使用垂直滚动条向下滚动数据网格,然后再次向上滚动到第一数据网格行,则我注意到,尽管Date1 <= Date2,现在更多行(Date1和Date2列)显示为橙色红色。


怎么了?


查看:


<Window x:Name="MainWindow" x:Class="My.Apps.WPF.TestApp.wMain"

    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

    xmlns:my="http://schemas.microsoft.com/wpf/2008/toolkit" 

    xmlns:classes="clr-namespace:My.Apps.WPF.TestApp.Classes"

    xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase"        

    WindowState="Maximized">



    <Grid x:Name="MyGrid" HorizontalAlignment="Stretch">

        <Grid.RowDefinitions>

            <RowDefinition Height="auto"></RowDefinition>

            <RowDefinition Height="*"></RowDefinition>

            <RowDefinition Height="auto"></RowDefinition>

        </Grid.RowDefinitions>


        <my:DataGrid  Grid.Row="1" Name="MyDg"                         

                  AutoGenerateColumns="False"

                  ItemsSource="{Binding Path=MyListOfItems}" 

                  SelectedItem="{Binding Path=MySelectedItem}" 

                  VerticalAlignment="Stretch" IsReadOnly="True" 

                  SelectionMode="Single" ColumnWidth="*"                                   

                  SelectionChanged="MyDg_SelectionChanged"

                  Width="{Binding Path=ActualWidth, ElementName=MyGrid}">


青春有我
浏览 275回答 1
1回答

梦里花落0921

我已通过将EnableRowVirtualization设置为False来解决。默认情况下将其设置为True。默认情况下,属性EnableColumnVirtualization设置为False。似乎使用虚拟化单元正在影响.NET 3.5中的数据网格样式。漏洞?如果是这样,我不知道它是否已在NET 4.0及更高版本中得到纠正。无论如何,我担心它,因为这意味着我无法使用虚拟化的单元...所以如果有人有其他解决方案,请在此处分享。其他用户也遇到过同样的问题,请参见此处更新时间:另外,如果要将EnableRowVirtualization保留为True,可以通过执行以下操作仅更改Virtualization Mode来解决:<DataGrid&nbsp;VirtualizingStackPanel.VirtualizationMode="Standard"&nbsp;/>问题是defaut的VirtualizationMode设置为Recycling,因此当重复使用容器时滚动时会导致行着色不正确。正如Eirik在他的回答中所解释的,这里对此进行了解释。
打开App,查看更多内容
随时随地看视频慕课网APP