2016-10-03 22 views
1

シドコスのコミュニティ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

EDIT:何らかの理由で、CheckBoxがでスタイリングされ、除く

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

青い背景!

Visual tree

EDIT 2

:私は色として#FF0000FFSolidColorBrushとして定義Background性質を有するビジュアルツリー内の要素を選択した

Check boxes with blue backgrounds

私はDataGridCheckBoxクラスをXceedがレンダリングするために使用するクラスを逆コンパイルしました

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

エクシードによって奇妙な決定は任意に青に背景色を設定するにはどう:E CheckBoxとは、このオーバーライドを見つけました。 @JBrooks'答えを使用して

EDIT 3

、私は次のことを試してみました:

<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プロパティのセッターが呼び出されることはありませんいくつかの理由で。ただし、getterは何度か呼び出され、CheckBoxは最初のバインド時に正しく表示されます。

+0

これは明らかに 'DataGridCheckBox'の既知のバグです。コードレビューのために... http://wpftoolkit.cod eplex.com/workitem/20210 – NathanAldenSr

+0

「これ」とは、青い背景の愚かさを意味します。 – NathanAldenSr

+0

3つの質問:出力ウィンドウに何かがありますか? CurrentCellChangedイベントに似た何かがありますか?チェックボックスがフォーカスを失ったときにセッターが設定されますか? – JBrooks

答えて

1

CellContentTemplateとCellEditorの両方があるため、最初のクリックは「編集モードに入る」ロジックです。以下のように1つだけ持っています。これは通常のWPF DataGrid用ですが、おそらくあなたのグリッドに似たようなものを試すことができます。 - 私は、行4のチェックボックスとにisChecked変更をクリックし

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

をので、このデータグリッドは、あなたが望むもののように振る舞うん:私はまた、これらのプロパティが設定されている。この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> 

SelectedUserをRow 4にバインドされたユーザーに設定する行4を現在の行にします。

+0

これはうまくいかないようです。私の編集を参照してください。 – NathanAldenSr

関連する問題