2009-08-04 171 views
12

我有一个WPF中的数据网格,我绑定到一个对象。WPF Toolkit Datagrid - 你如何关闭选择?

我有一个DataGridCheckBoxColumn,我希望用户能够通过并勾选他们想要的。问题是他们必须点击两次,一次用于选择,然后再次选中/取消选中。你究竟如何解决这个问题,我一直在寻找方法来寻找答案。该数据网格具有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> 
+0

对此主题较新的问题,与许多很好的答案:http://stackoverflow.com/questions/3833536/how-to-perform-single-click-checkbox-selection-in-wpf-datagrid/8333704#8333704 – surfen 2011-12-20 01:00:35

回答

19

第一次单击将单元格置于编辑模式,然后第二次单击允许您修改复选框。您可以通过使用DataGridTemplateColumn而不是DataGridCheckBoxColumn来更改此行为。这种替换您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 2009-08-04 23:38:12

+2

在WPF 4.0中不适用于我。谢谢你的风格。 :) – bugfixr 2012-02-16 14:08:26

1

首先,我知道这是一个很老的问题,但我仍然认为我” d试着回答它。

几天前,我遇到了同样的问题,并遇到了令人惊讶的短期解决方案(请参阅this blog)。基本上,所有你需要做的就是用下面的替换DataGridCheckBoxColumn定义您的XAML:

<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狂热者眼中的地位;)。