12

オブジェクトにバインドしている WPF のデータグリッドがあります。

そこに DataGridCheckBoxColumn があり、ユーザーが必要なものにチェックを入れてチェックできるようにします。問題は、2回クリックする必要があることです.1回は選択し、もう1回はチェック/チェックを外します。一体どうやってこれをオフにするのですか、私はこれに対する答えを見つけるために長い間探してきました. データグリッドには SelectionMode プロパティと SelectionUnit プロパティがあります - どちらも「なし」または「立ち去る」を受け入れません

どんな助けでも大歓迎です!私のコードは参考のために以下にあります

<my:DataGrid Margin="15"  Name="dgPreview" 
        AutoGenerateColumns="False" CanUserSortColumns="True" 
             CanUserDeleteRows="True" 
             Background="White" 
             ColumnHeaderHeight="20" 
             VerticalScrollBarVisibility="Visible" 
             RowDetailsVisibilityMode="Visible" 
             >

    <my:DataGrid.Columns>
        <my:DataGridCheckBoxColumn  MinWidth="50" Width="Auto" Header="Include" Binding="{Binding Include}" />
        <my:DataGridTextColumn MinWidth="50"  Width="Auto" Header="Override #" Binding="{Binding OverrideNumber}" />
        <my:DataGridTextColumn MinWidth="220" Width="*" Header="Name" Binding="{Binding Name}" />
        <my:DataGridTextColumn MinWidth="50" Width="Auto" IsReadOnly="True"  Header="Preview" Binding="{Binding Preview}" />
    </my:DataGrid.Columns>
</my:DataGrid>
4

2 に答える 2

19

最初のクリックでセルが編集モードになり、2 回目のクリックでチェックボックスを変更できます。この動作は、DataGridCheckBoxColumn の代わりに DataGridTemplateColumn を使用して変更できます。DataGridCheckBoxColumn を次のように置き換えます。

<my:DataGridTemplateColumn MinWidth="50" Width="Auto" Header="Include" SortMemberPath="Include">
   <my:DataGridTemplateColumn.CellTemplate>
      <DataTemplate>
         <CheckBox Style="{StaticResource DataGridCheckBoxStyle}" IsChecked="{Binding Path=Include}" />
      </DataTemplate>
   </my:DataGridTemplateColumn.CellTemplate>
</my:DataGridTemplateColumn>

DataGridCheckBoxStyle は、DataGrid で CheckBox の外観を少し良くするだけです。

<Style x:Key="DataGridCheckBoxStyle" TargetType="CheckBox" BasedOn="{StaticResource {x:Type CheckBox}}">
   <Setter Property="VerticalAlignment" Value="Center" />
   <Setter Property="Margin" Value="8,0,3,0" />
</Style>
于 2009-08-04T15:38:27.363 に答える
1

まず、これはかなり古い質問であることはわかっていますが、それでも答えてみようと思いました。

私は数日前に同じ問題を抱えていましたが、驚くほど短い解決策に出くわしました (このブログを参照してください)。基本的に、DataGridCheckBoxColumnXAML の定義を次のように置き換えるだけで済みます。

<DataGridTemplateColumn Header="MyCheckBoxColumnHeader">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <CheckBox HorizontalAlignment="Center" VerticalAlignment="Center" IsChecked="{Binding Path=MyViewModelProperty, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

このソリューションの利点は明らかです。これは XAML 専用です。したがって、追加のUIロジックでコードバックに負担をかけることを効果的に控え、MVVM熱狂者の目でステータスを維持するのに役立ちます;)。

于 2013-11-01T09:55:48.960 に答える