0

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]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 に答える