0

所有,我正在根据 aStatusBar中选择的行数更新 a 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's中更新TextBlock] 的功能正在工作。有关我用来执行此操作的基本机制的更多信息,请参阅https://stackoverflow.com/a/2615487/626442

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

显示错误

我已经设置EnableRowVirtualization="False"了,否则它只是平面不起作用,但为什么现在我的第一列没有正确渲染,我该如何让它正确渲染?

谢谢你的时间。


笔记。我试图设置EnableColumnVirtualization="False",但这似乎更糟!?我也设置了两者EnableColumnVirtualization="True"EnableRowVirtualization="True"这大大提高了性能并消除了渲染问题。但是,这会破坏StatusBar更新,它只会在视图滚动时停止。

4

1 回答 1

1

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

于 2013-07-04T14:27:49.073 回答