全部,我根据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。
现在,当我选择很多项目时,我注意到第一列[称为“代码”]未正确显示/呈现(如图所示,其中一半被裁剪掉)。
我设置了TextBlock
否则它只是平面不起作用,但为什么现在我的第一列无法正确渲染?如何正确渲染?
感谢您的时间。
注意。我试图设置EnableRowVirtualization="False"
,但这看起来更糟!?我还设置了EnableColumnVirtualization="False"
和EnableColumnVirtualization="True"
,这极大地提高了性能并消除了渲染问题。但是,这会中断EnableRowVirtualization="True"
更新,只要视图滚动就会停止。
答案 0 :(得分:1)
看看http://grokys.blogspot.fr/2012/02/mvvm-and-multiple-selection-part-iv.html 这应该解决你的问题,并使你的代码“更清洁”