DataGridCheckboxColumn到DataGridTemplateColumn

时间:2011-06-22 21:47:36

标签: silverlight silverlight-4.0 datagrid

在DataGrid中,我想根据ViewModel上的某些条件更改行的颜色。

虽然这似乎是WPF中的一项简单任务,但在Silverlight中你不能将Bindings绑定到Style定义中的属性,你也无法使用datagrid的RowBackground。

相反,我必须更改每个列标题,从DataGridTextColumn更改为DataGridTemplateColumn,并在Grid包装中创建自己的文本框。在那里,我将Grid的背景绑定到我的ViewModel中的条件颜色选择。

一切正常。但是,当我尝试将DataGridCheckboxColumn复制到DataGridTemplateColumn时遇到问题。此外,我在网格中创建了一个复选框,可以相应地设置颜色,即使数据网格设置为只读,也可以打开和关闭复选框。其中的复选框似乎并不关心数据网格的只读状态。

<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中实现的目标?

非常感谢,

1 个答案:

答案 0 :(得分:2)

您需要为CellTemplate指定CellEditingTemplateDataGridTemplateColumn。以下内容应该有效:

<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对样式中的绑定的解决方法也可能是有意义的。