2009-09-29 102 views
2

我有一個複選框的數據網格。當我單擊單元格時,我希望在選中包含單元格的單元格時自動檢查該複選框。現在正在做的是,我需要選擇單元格,然後點擊複選框,這對我們來說非常煩人。數據網格複選框自動化

<dg:DataGrid Name="GridUsureOperation" Margin="10,444,82,6" ItemsSource="{Binding}" Style="{StaticResource GridMenu}" SelectionMode="Single" SelectionUnit="Cell"> 
    <dg:DataGrid.Columns> 
     <dg:DataGridTextColumn Header="Opération" Width="*" MinWidth="60" 
           Binding="{Binding Operation.DescOperation}" 
           IsReadOnly="True" /> 
     <dg:DataGridTextColumn Header="Dernière maintenance" Width="SizeToHeader" MinWidth="50" 
           Binding="{Binding DateDerniereMaintenance, StringFormat=yyyy-MM-dd}" 
           IsReadOnly="True"/> 
     <dg:DataGridTextColumn Header="Usure dernière maintenance" Width="SizeToHeader" MinWidth="50" 
           Binding="{Binding UsureDerniereOperation}" 
           IsReadOnly="True"/> 
     <dg:DataGridTextColumn Header="Fréquence(usure)" Width="SizeToHeader" MinWidth="50" 
           Binding="{Binding QteUsure}" 
           IsReadOnly="True"/> 
     <dg:DataGridTextColumn Header="Unité" Width="SizeToHeader" MinWidth="50" 
           Binding="{Binding TypeUsure.Description}" 
           IsReadOnly="True"/> 
     <dg:DataGridCheckBoxColumn Header="Forcer?" Width="SizeToHeader" MinWidth="50" 
           Binding="{Binding AfficherMaintenance}"           
           IsReadOnly="False"> 

     </dg:DataGridCheckBoxColumn> 
    </dg:DataGrid.Columns> 
</dg:DataGrid> 

回答

8

我不喜歡使用DataGridCheckBoxColumn,因爲它需要有焦點才能與複選框交互。所以我把一個CheckBox放在模板列中,你只需要點擊一下就可以改變狀態。

<dg:DataGridTemplateColumn Width="SizeToHeader"> 
    <dg:DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <CheckBox IsChecked="{Binding Path=Selected, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Margin="2,0,2,0" /> 
     </DataTemplate> 
    </dg:DataGridTemplateColumn.CellTemplate> 
</dg:DataGridTemplateColumn> 

但是,如果你真的想要的複選框改變狀態,當他們在細胞中的任意位置單擊(而不是僅僅在複選框),您可以使用下面的代碼,這使得CheckBox控件佔據整個大小的細胞。

<dg:DataGridTemplateColumn Width="SizeToHeader"> 
    <dg:DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <CheckBox IsChecked="{Binding Path=Selected, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Margin="2,0,2,0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" /> 
     </DataTemplate> 
    </dg:DataGridTemplateColumn.CellTemplate> 
</dg:DataGridTemplateColumn> 

UPDATE 我沒有在相當長的一段做WPF開發。現在我在使用這個解決方案時遇到了一個問題,那就是DataGrid已經被嵌入到WPF庫中,並且您不再需要該工具箱了。該複選框不想像之前寫的那樣更新支持屬性,所以我添加了一個更完整的綁定語句,看起來確實有效。

+1

謝謝,我不介意他們是否必須直接點擊chcekbox。我不想要的是必須讓重點能夠點擊它。 – 2009-10-01 12:59:59