Xceed DataGridControl中的单击可编辑边界CheckBox

Xceed DataGridControl中的单击可编辑边界CheckBox

问题描述:

我花了一个小时寻找应该是一个简单问题的解决方案:如何在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

您既具有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