2009-08-04 16 views
12

私はオブジェクトにバインドするWPFでデータグリッドを持っています。WPF Toolkit Datagrid - どのように選択を解除しますか?

私はそこにユーザーが通過して、必要なものをチェックできるようにするDataGridCheckBoxColumnを持っています。問題は、2回クリックしなければならないということです.1回は選択してからもう一度チェック/チェックを外す必要があります。どうしたらこれをオフにするのですか、私はこれに対する答えを見つけ出す方法を探してきました。 DataGridにSelectionModeプロパティとSelectionUnitプロパティがあります。どちらも 'none'または 'go away'を受け入れません。

何か助けてください!私のコードは参照のためのものです

<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> 
+0

このトピックに関する新しい質問と多くの良い回答:http://stackoverflow.com/questions/3833536/how-to-perform-single-click-checkbox-selection-in-wpf-datagrid/8333704#8333704 – surfen

答えて

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内ちょっと見た目が良くなります:

<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> 
+0

優れている、感謝のヒープジョン! – RodH257

+2

WPF 4.0では動作しません。しかし、スタイルをありがとう。 :) – bugfixr

+0

WPF 4.0の私のために動作します。しかし、私はコンパイル中に警告を出し、デザイナーは "BasedOn"タグをスタイルで使用します。 'The Resource" {x:Type CheckBox} "が見つかりませんでした。 – OneWorld

1

まずの、私はこれはかなり古い質問です知っているが、私はまだ私が」と思いました試してみてください。

私は2,3日前に同じ問題を抱え、驚くほど短い解決策を見つけました(this blog参照)。基本的に、あなたがする必要があるすべては、以下を使用してXAMLでDataGridCheckBoxColumn定義を置き換えている:

<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の熱狂者の目にはあなたのステータスを維持するのに役立ちます。

+0

これは上記と同じです。 – BenjaminPaul

+0

この回答に感謝します。チェックボックスをクリックしても基本的なオブジェクトが実際に変更されていないという意味で、上記のことは私にとってはうまくいきませんでした。私はあなたがMode = TwoWayで追加したという事実はその問題を解決したと信じています。 – muaddib

関連する問題