2011-11-14 51 views
2

我剛剛創建一個DataGrid:DataGridCheckBoxColumn工作不細

<DataGrid> 
     <DataGrid.Columns> 
      <DataGridTextColumn ... /> 
      <DataGridCheckBoxColumn Binding="{Binding Path=IsEditing, Mode=TwoWay}" Header="IsEditing" /> 
     </DataGrid.Columns> 
    </DataGrid> 

我的問題是當我想在第一次檢查中記錄此複選框的行被選中,只有這樣,我可以檢查此複選框。 ..這是非常不舒服...此外... 事件爲其創建對象的依賴項屬性此DataGrid也運行時,我會選擇另一行

更清楚,我將解釋你一步一步:

  1. 我想選擇將運行依賴屬性的活動項目。
  2. 我點擊複選框,但insted的cheched僅排在選擇
  3. 我必須再次單擊上checbox檢查,但事件還沒有運行
  4. 我必須單擊/選擇其他行進行的運行事件最後選定對象/行的依賴項屬性

爲什麼這個工作如此糟糕?是否有任何選項可以使用戶(也適用於我)更加舒適?

+0

我記得這是一些關於可獲得焦點或類似的東西。如果您在模板列中使用複選框,那麼它不會有同樣的問題。 – Paparazzi

+0

用相似的問題與可能的答案:http://forums.silverlight.net/p/21396/74629.aspx –

+0

什麼原因,你發現DataGridTemplateColumn完全無用? –

回答

0

您將需要添加的MouseLeftButtonUp事件爲DataGrid:

private void GridMouseLeftButtonUp(object sender, MouseButtonEventArgs e) 
    { 
     var grid = sender as DataGrid; 

     if (grid == null) 
     { 
      return; 
     } 

     // Assume first column is the checkbox column. 
     if (grid.CurrentColumn == grid.Columns[0]) 
     { 
      var gridCheckBox = (grid.CurrentColumn.GetCellContent(grid.SelectedItem) as CheckBox); 

      if (gridCheckBox != null) 
      { 
       gridCheckBox.IsChecked = !gridCheckBox.IsChecked; 
      } 
     } 
    } 
0

添加屬性IsThreeState =「假」的DataGridCheckBoxColumn