在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中实现的目标?
非常感谢,
答案 0 :(得分:2)
您需要为CellTemplate
指定CellEditingTemplate
和DataGridTemplateColumn
。以下内容应该有效:
<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对样式中的绑定的解决方法也可能是有意义的。