使用多选时WPF DataGrid列损坏

时间:2013-07-03 23:40:43

标签: c# wpf mvvm datagrid rendering

全部,我根据StatusBar中选择的行数更新DataGrid。我是用MVVM做的。相关的XAML如下

<DataGrid Grid.Row="1" AlternatingRowBackground="Gainsboro" AlternationCount="2" 
          HorizontalAlignment="Stretch" VerticalAlignment="Stretch" 
          AutoGenerateColumns="False" RowHeaderWidth="0" IsReadOnly="True"
          CanUserAddRows="False" CanUserDeleteRows="False" SelectionMode="Extended" 
          EnableRowVirtualization="False" ItemsSource="{Binding Cultures}">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Code" Binding="{Binding Code}" IsReadOnly="True"/>
        <DataGridTextColumn Header="Language" Binding="{Binding Language}" IsReadOnly="True"/>
        <DataGridTextColumn Header="LocalName" Binding="{Binding LocalName}" IsReadOnly="True"/>
    </DataGrid.Columns>
    <DataGrid.RowStyle>
        <Style TargetType="DataGridRow">
        <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
        </Style>
    </DataGrid.RowStyle>
</DataGrid>

定义的StatusBar
<StatusBar Grid.Row="1" Margin="0,0.4,0.4,-0.4">
    <StatusBarItem DockPanel.Dock="Left" Background="#FF007ACC" Margin="0,2,0,0">
        <TextBlock Text="{Binding TotalSelectedCultures}"  Margin="5,0,0,0" Foreground="White"/>
    </StatusBarItem>
</StatusBar>

我包含此代码,以便您可以查看我在DataGrid上设置的选项;正如我所说,功能[在使用鼠标选择行时,所选行数在StatusBar的{​​{1}}]中更新正在运行。有关我用于执行此操作的基本机制的详细信息,请参阅https://stackoverflow.com/a/2615487/626442

现在,当我选择很多项目时,我注意到第一列[称为“代码”]未正确显示/呈现(如图所示,其中一半被裁剪掉)。

Display Error

我设置了TextBlock否则它只是平面不起作用,但为什么现在我的第一列无法正确渲染?如何正确渲染?

感谢您的时间。


注意。我试图设置EnableRowVirtualization="False",但这看起来更糟!?我还设置了EnableColumnVirtualization="False"EnableColumnVirtualization="True",这极大地提高了性能并消除了渲染问题。但是,这会中断EnableRowVirtualization="True"更新,只要视图滚动就会停止。

1 个答案:

答案 0 :(得分:1)

看看http://grokys.blogspot.fr/2012/02/mvvm-and-multiple-selection-part-iv.html 这应该解决你的问题,并使你的代码“更清洁”