WPF Toolkit Datagrid - 如何关闭选择?

时间:2009-08-04 05:44:34

标签: c# wpf xaml datagrid wpftoolkit

我在WPF中有一个数据网格,我绑定到一个对象。

我有一个DataGridCheckBoxColumn,我希望用户能够通过并勾选他们想要的那些。问题是他们必须点击两次,一次选择然后再次检查/取消选中。你究竟怎么把它关掉,我一直在寻找方法来寻找答案。 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>

2 个答案:

答案 0 :(得分: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只是让CheckBox在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>

答案 1 :(得分:1)

首先,我知道这是一个非常古老的问题,但我仍然认为我会尝试回答它。

我几天前遇到了同样的问题,并遇到了一个令人惊讶的简短解决方案(见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狂热者的眼中保持您的状态;)。