我花了一個小時尋找應該是一個簡單問題的解決方案:如何在Xceed的社區DataGridControl
中創建單擊可編輯邊界CheckBox
。Xceed 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
的樣式與藍色背景!
我選擇具有定義爲SolidColorBrush
一個Background
屬性與#FF0000FF
作爲顏色在視覺樹中的元素:
編輯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永遠不會當我檢查框調用。儘管如此,這個獲取器被調用了幾次,並且在初始綁定時,它們都正確顯示。
這顯然是'DataGridCheckBox'中的一個已知錯誤,非常適合代碼複審... http://wpftoolkit.cod eplex.com/workitem/20210 – NathanAldenSr
「這」我的意思是藍色背景的愚蠢。 – NathanAldenSr
3個問題:輸出窗口中是否有任何內容?你有沒有類似於CurrentCellChanged捕獲的事件?當複選框失去焦點時,setter是否被設置? – JBrooks