Xceed DataGridControl中的单击可编辑边界CheckBox
我花了一个小时寻找应该是一个简单问题的解决方案:如何在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永远不会当我检查框调用。尽管如此,这个获取器被调用了几次,并且在初始绑定时,它们都正确显示。
您既具有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行的用户的当前行。
这似乎不起作用。看我的编辑。 – NathanAldenSr
这显然是'DataGridCheckBox'中的一个已知错误,非常适合代码复审... http://wpftoolkit.cod eplex.com/workitem/20210 – NathanAldenSr
“这”我的意思是蓝色背景的愚蠢。 – NathanAldenSr
3个问题:输出窗口中是否有任何内容?你有没有类似于CurrentCellChanged捕获的事件?当复选框失去焦点时,setter是否被设置? – JBrooks