2013-07-03 35 views
0

全部我正根据在DataGrid中选择的行数更新StatusBar。我正在使用MVVM进行此操作。有关XAML是如下WPF DataGrid列在使用多重选择时会损坏

<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 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;正如我所说的,在[StatusBarTextBlock]中更新所选择行数的鼠标行选择功能正在工作。有关我用于执行此操作的基本机制的更多信息,请参阅https://stackoverflow.com/a/2615487/626442

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

Display Error

我已经设置EnableRowVirtualization="False"否则它只是飞机不能正常工作,但为什么现在是我的第一列无法正确渲染,我如何让它正确地呈现?

谢谢你的时间。


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

+1

奇怪了。这篇文章听起来有点不可靠,特别是在“确保设置EnableRowVirtualization = False”的地方。我想知道是否可以使用附加的属性来完成选定的项目绑定?我用一个将r/o Columns属性绑定到我的虚拟机中的一个集合。请参阅:http://stackoverflow.com/questions/320089/how-do-i-bind-a-wpf-datagrid-to-a-variable-number-of-columns。我想知道您是否可以修改该代码以使用所选项目? –

+0

嗨安德鲁,我其实问这个问题相同(因为所有搜索都是空的)[这里](http://stackoverflow.com/a/16891938/626442)这是一个很好的解决方案绑定到可变数量的列。不过,我不确定这个建议是什么意思。在这种情况下,你觉得对列的绑定有什么帮助,或者我有没有理解?感谢您的时间... – MoonKnight

+0

SO链接中的答案之一包括一个附加属性的代码,该属性可以绑定到'Columns'属性(通常不可能,因为它是R/O)。我认为你可能会适应该代码来创建一个附加的属性,让你绑定到你的网格的* SelectedItems *属性(也是R/O,因此通常不可能绑定到)。如果这是可行的,那么最好采用你当前的绑定方法(使用每行的IsSelected属性),因为这可能是你奇怪问题的原因。 –

回答