是否可以将数据网格列值绑定到ItemsSource中指定的绑定类的一个属性,但是引用该类中的不同属性来设置单元格的样式?
这是一个代码示例:
<DataGrid ItemsSource="MyCollection">
<DataGridTextColumn Header="MyColumn" Binding={Binding ColumnText} />
<DataGridTextColumn Header="MyColumn2" Binding={Binding ColumnText2} />
</DataGrid>
假设我在MyCollection中的对象中有另外两个属性(Enum或Brush),我想引用它们来设置各个单元格的背景颜色;可以这样做吗?
编辑 - 我需要为多个列执行此操作,每个列都查看不同的属性以确定它应该是什么颜色;我在上面的代码示例中添加了第二列。
我知道我可以根据ColumnText中的值设置样式,但这不是我需要做的。
我尝试设置样式数据触发器,但是当我尝试绑定时,我只能绑定整个数据上下文中的某些内容,而不是填充当前行的对象中的另一个属性。
非常感谢!
答案 0 :(得分:4)
如果我理解正确,您试图通过Row模型中的属性设置单元格背景。
您可以通过设置单元格样式来实现此目的,并将 DataTrigger 设置为该样式以绑定到所需的属性。
您希望将每个具有数字3的单元格绘制为绿色:
<DataGrid ItemsSource="{Binding Rows}" AutoGenerateColumns="True">
<DataGrid.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Style.Triggers>
<DataTrigger Binding="{Binding Number}" Value="3">
<Setter Property="Background">
<Setter.Value>
<SolidColorBrush Color="Green"/>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.CellStyle>
</DataGrid>
当然,您可以使用自己的属性和您感兴趣的值更改 Number 属性。
如果你想做一些更复杂的事情,比如价值范围等,你应该采用传统的转换方式。
如果要为每列创建不同的单元格样式,则应明确设置列:
<DataGrid ItemsSource="{Binding Rows}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Number}">
<DataGridTextColumn.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Style.Triggers>
<DataTrigger Binding="{Binding Number}" Value="3">
<Setter Property="Background">
<Setter.Value>
<SolidColorBrush Color="Green"/>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGridTextColumn.CellStyle>
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
但要注意一件重要的事情,
您 设置 AutoGenerateColumns =&#34; False&#34; ,否则列将生成两次。