来自XAML

时间:2016-04-07 19:21:31

标签: c# wpf xaml

是否可以将数据网格列值绑定到ItemsSource中指定的绑定类的一个属性,但是引用该类中的不同属性来设置单元格的样式?

这是一个代码示例:

<DataGrid ItemsSource="MyCollection">
  <DataGridTextColumn Header="MyColumn" Binding={Binding ColumnText} />
  <DataGridTextColumn Header="MyColumn2" Binding={Binding ColumnText2} />
</DataGrid>

假设我在MyCollection中的对象中有另外两个属性(Enum或Brush),我想引用它们来设置各个单元格的背景颜色;可以这样做吗?

编辑 - 我需要为多个列执行此操作,每个列都查看不同的属性以确定它应该是什么颜色;我在上面的代码示例中添加了第二列。

我知道我可以根据ColumnText中的值设置样式,但这不是我需要做的。

我尝试设置样式数据触发器,但是当我尝试绑定时,我只能绑定整个数据上下文中的某些内容,而不是填充当前行的对象中的另一个属性。

非常感谢!

1 个答案:

答案 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; ,否则列将生成两次。