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;).