2011-06-22 10 views
1

DataGrid内で、ViewModelの特定の条件に従って行の色を変更したいと思います。DataGridCheckboxColumn to DataGridTemplateColumn

これはWPFでは簡単な作業ですが、Silverlightではスタイル定義内のプロパティにBindingsを設定することはできませんが、DataGridのRowBackgroundを利用することはできません。

代わりにDataGridTextColumnからDataGridTemplateColumnに各列ヘッダーを変更し、そこにグリッドでラップされた独自のテキストボックスを作成する必要がありました。そこで私はViewModel内の背景色を条件付き色の選択にバインドします。

これはすべて問題なく動作します。しかし、DataGridCheckboxColumnをDataGridTemplateColumnに複製しようとすると問題が発生します。また、ここで私はグリッド内のチェックボックスを作成し、それに応じて色を設定することができます。データグリッドがReadonlyに設定されていてもチェックボックスをオン/オフすることもできます。チェックボックスは、DataGridの読み取り専用状態を気にしていないようです。

<sdk:DataGridTemplateColumn.CellTemplate> 
<DataTemplate> 
    <Grid> 
    <CheckBox HorizontalAlignment="Center" VerticalAlignment="Center"> 
     <CheckBox.IsChecked> 
      <Binding Path=Sales Mode="TwoWays"/> 
     <CheckBox.IsChecked> 
    </CheckBox> 
    </Grid> 
</DataTemplate> 
</sdk:DataGridTemplateColumn.CellTemplate> 

私はSilverlightで何を達成しようとしているのですか?

多くのおかげで、

+0

解決のためにも、この記事をチェックしてください。http://stackoverflow.com/questions/6464445/odd-behaviour-when-replacing-datagridcheckboxcolumn-with-a -datagridtemplatecolumn – Houman

答えて

2

あなたはCellTemplateDataGridTemplateColumnためCellEditingTemplateを指定する必要があります。以下のようなものが動作するはずです:スタイル内のバインディングの

<sdk:DataGridTemplateColumn IsReadOnly="True"> 
    <sdk:DataGridTemplateColumn.CellEditingTemplate> 
     <DataTemplate> 
      <CheckBox HorizontalAlignment="Center" 
         VerticalAlignment="Center" 
         IsChecked="{Binding SomeProperty}"> 
      </CheckBox> 
     </DataTemplate> 
    </sdk:DataGridTemplateColumn.CellEditingTemplate> 
    <sdk:DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <CheckBox HorizontalAlignment="Center" 
         VerticalAlignment="Center" 
         IsChecked="{Binding SomeProperty}" 
         IsEnabled="False"> 
      </CheckBox> 
     </DataTemplate> 
    </sdk:DataGridTemplateColumn.CellTemplate> 
</sdk:DataGridTemplateColumn> 

This回避策も重要である可能性があります。

+0

Simon、特定の列のIsReadOnlyをハードコーディングしています。デフォルトでは、データグリッドの状態にバインドする必要があります。例えばTextBoxでうまく動作しますが、まだCheckBoxについて特別なことは分かりません。はい、私はEditingTemplateも実装しています。ありがとうございます – Houman

+0

Btwリンクをありがとうございます。このソリューションは有望です。それが動作するかどうかを見てみましょう... – Houman

+0

@Kaveは 'IsReadOnly'をテンプレート列から取り除き、' DataGrid.IsReadOnly'の値を尊重することがわかります(つまり、本質的に解は機能します)。それが動作するための重要な部分は、 'CellEditingTemplate'に設定されていないことに注意してください。' CellTemplate'の 'CheckBox'に' IsEnabled = "false"があります。 –

-1
DataGridCheckBoxColumn chkcolTemplate = new DataGridCheckBoxColumn(); 
      chkcolTemplate.Width = DataGridLength.Auto; 
      chkcolTemplate.Binding = new Binding("IsChecked"); 
      chkcolTemplate.Binding.Mode = BindingMode.TwoWay; 
      chkcolTemplate.Header = "Select All"; 
      chkcolTemplate.HeaderStyle = this.Resources["RateTableDataGridColumnHeaderStyle"] as Style; 
      RateCangeListDatagrid.Columns.Add(chkcolTemplate); 
-1
 var myTemplateckhColumn = new DataGridTemplateColumn(); 
     myTemplateckhColumn.Header = ProductConstants.Decision; 
     myTemplateckhColumn.CellTemplate = Resources["chkrates"] as DataTemplate; 
     myTemplateckhColumn.HeaderStyle = Resources["RateTableDataGridColumnHeaderStyle"] as Style; 
     datas.Columns.Add(myTemplateckhColumn); 

+0

質問に詳細を追加してください –

+0