2016-10-03 93 views
1

我花了一個小時尋找應該是一個簡單問題的解決方案:如何在Xceed的社區DataGridControl中創建單擊可編輯邊界CheckBoxXceed DataGridControl中的單擊可編輯邊界CheckBox

需要明確的是:我想要一個CheckBox的列,其中用戶可以點擊任何CheckBox,無論選擇什麼行,並具有視圖模型的IsSelected屬性相應的變化。

下面是我試過的最新排列。此代碼讀取模型中的值,但由於某種原因,單擊CheckBox不會調用IsSelected設置器。

<xcdg:DataGridControl x:Name="DictionariesDataGridControl" ItemsSource="{Binding Mode=OneWay, Source={StaticResource DictionariesViewSource}}" AutoCreateColumns="False" AutoRemoveColumnsAndDetailConfigurations="False" SelectionMode="Extended" NavigationBehavior="RowOnly"> 
    <xcdg:DataGridControl.View> 
     <xcdg:TableView UseDefaultHeadersFooters="False" ShowRowSelectorPane="False" VerticalGridLineThickness="0"> 
      <xcdg:TableView.FixedHeaders> 
       <DataTemplate> 
        <xcdg:ColumnManagerRow BorderThickness="0"/> 
       </DataTemplate> 
      </xcdg:TableView.FixedHeaders> 
     </xcdg:TableView> 
    </xcdg:DataGridControl.View> 
    <xcdg:DataGridControl.Columns> 
     <xcdg:Column FieldName="IsSelected" MinWidth="20" MaxWidth="20" CellEditorDisplayConditions="RowIsCurrent"> 
      <xcdg:Column.CellContentTemplate> 
       <DataTemplate> 
        <CheckBox IsChecked="{Binding ., Mode=OneWay}" IsHitTestVisible="False"/> 
       </DataTemplate> 
      </xcdg:Column.CellContentTemplate> 
      <xcdg:Column.CellEditor> 
       <xcdg:CellEditor> 
        <xcdg:CellEditor.EditTemplate> 
         <DataTemplate> 
          <CheckBox IsChecked="{Binding ., Mode=TwoWay}"/> 
         </DataTemplate> 
        </xcdg:CellEditor.EditTemplate> 
       </xcdg:CellEditor> 
      </xcdg:Column.CellEditor> 
     </xcdg:Column> 
    </xcdg:DataGridControl.Columns> 

編輯1

我想這一點,這不正是我需要的:

<xcdg:Column FieldName="IsSelected" MinWidth="20" MaxWidth="20" CellEditorDisplayConditions="Always"/> 

除了的是,由於某種原因,該CheckBox的樣式與藍色背景!

Check boxes with blue backgrounds

我選擇具有定義爲SolidColorBrush一個Background屬性與#FF0000FF作爲顏色在視覺樹中的元素:

Visual tree

編輯2

我反編譯了Xceed用於渲染的類DataGridCheckBox ËCheckBox,發現這個覆蓋:

public override void OnApplyTemplate() 
{ 
    base.OnApplyTemplate(); 
    this.ChildCheckBox.Background = (Brush) new SolidColorBrush(Colors.Blue); 
} 

什麼用Xceed一個奇怪的決定,背景色任意設置爲藍色。

編輯3

使用@JBrooks的回答,我試過如下:

<xcdg:Column FieldName="IsSelected" MinWidth="20" MaxWidth="20" CellEditorDisplayConditions="Always"> 
    <xcdg:Column.CellEditor> 
     <xcdg:CellEditor> 
      <xcdg:CellEditor.EditTemplate> 
       <DataTemplate> 
        <CheckBox IsChecked="{Binding ., Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/> 
       </DataTemplate> 
      </xcdg:CellEditor.EditTemplate> 
     </xcdg:CellEditor> 
    </xcdg:Column.CellEditor> 
</xcdg:Column> 

不幸的是,由於某種原因,在IsSelected屬性的setter永遠不會當我檢查框調用。儘管如此,這個獲取器被調用了幾次,並且在初始綁定時,它們都正確顯示。

+0

這顯然是'DataGridCheckBox'中的一個已知錯誤,非常適合代碼複審... http://wpftoolkit.cod eplex.com/workitem/20210 – NathanAldenSr

+0

「這」我的意思是藍色背景的愚蠢。 – NathanAldenSr

+0

3個問題:輸出窗口中是否有任何內容?你有沒有類似於CurrentCellChanged捕獲的事件?當複選框失去焦點時,setter是否被設置? – JBrooks

回答

1

您既具有CellContentTemplate又具有CellEditor,因此第一次單擊就進入了「進入編輯模式」邏輯。就像下面一樣。這是一個正常的WPF DataGrid,但也許你可以嘗試類似的網格。

<DataGridTemplateColumn Header="Active" SortMemberPath="IsActive" > 
    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <CheckBox IsChecked="{Binding IsActive, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" IsEnabled="{Binding IsEnabled}" Style="{StaticResource rightsCB}" /> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
    </DataGridTemplateColumn> 

對於這個DataGrid中我也有這些屬性設置:

SelectedItem="{Binding SelectedUser, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}SelectionUnit="FullRow" SelectionMode="Single"

所以這個DataGrid中沒有像你想要的東西 - 我點擊4行的複選框和器isChecked變化並且它也使第4行成爲將SelectedUser設置爲綁定到第4行的用戶的當前行。

+0

這似乎不起作用。看我的編輯。 – NathanAldenSr