WPF Toolkit Datagrid - как вы отключаете выделение?
У меня есть datagrid в 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>
Ответы
Ответ 1
Первый клик помещает ячейку в режим редактирования, а второй щелчок позволяет вам изменить этот флажок. Вы можете изменить это поведение, используя 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>
Ответ 2
Сначала я знаю, что это довольно старый вопрос, но я все же думал, что попробую ответить на него.
У меня была такая же проблема несколько дней назад, и на нее набросилось удивительно короткое решение (см. этот блог). В основном, все, что вам нужно сделать, это заменить определение 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; таким образом, он эффективно воздерживает вас от отягощения вашего кода обратно дополнительной логикой пользовательского интерфейса и помогает поддерживать ваш статус в глазах фанатиков MVVM;).