WPF Toolkit Datagrid-как отключить выделение?

У меня есть datagrid в WPF, который я привязываю к объекту.

У меня есть DataGridCheckBoxColumn, на котором я хочу, чтобы пользователи могли пройти и отметить те, которые они хотят. Проблема в том, что они должны щелкнуть дважды, один раз для выбора, а затем снова проверить/снять флажок. Как, ради всего святого, ты выключаешь это, я долго искал способ найти ответ на это. Datagrid имеет свойства SelectionMode и SelectionUnit-ни один из которых не принимает "none" или " go прочь!"--2-->

любая помощь приветствуется! Мой код ниже Для справки

<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 ответов


первый щелчок переводит ячейку в режим редактирования, затем второй щелчок позволяет изменить флажок. Это поведение можно изменить с помощью 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>

у меня была та же проблема пару дней назад и наткнулся на удивительно короткое решение для нее (см. этот блог). В принципе, все, что вам нужно сделать, это заменить 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;).