2009-08-04 176 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狂熱者眼中的地位;)。