WPF将DataGridTextColumns单元字符串值绑定到样式设置器中

时间:2016-02-11 06:57:11

标签: c# wpf xaml

我有一个绑定到列表的数据网格,每个单元格值都绑定到唯一的布尔值。

<UserControl.Resources>
    <Style TargetType="{x:Type DataGridCell}">
        <Style.Triggers>
            <DataTrigger Binding="{Binding Have1}" Value="True">
                <Setter Property="Background" Value="#263DDE36"/>
            </DataTrigger>
            <DataTrigger Binding="{Binding Have1}" Value="False">
                <Setter Property="Background" Value="#26FF5454"/>
            </DataTrigger>
        </Style.Triggers>
    </Style>
</UserControl.Resources>

<DataGrid ItemsSource="{Binding AuditList}" AutoGenerateColumns="False" >
    <DataGrid.Columns>
        <DataGridTextColumn Header="Art1" Binding="{Binding Have1}"/>
        <DataGridTextColumn Header="Art2" Binding="{Binding Have2}"/>
        <DataGridTextColumn Header="Art2" Binding="{Binding Have3}"/>
    </DataGrid.Columns>
</DataGrid>

这很好但我想将绑定“Have1”更改为单元格当前字符串或bool值。

<DataTrigger Binding="{Binding DataCellsValue="True"}" Value="True">
    <Setter Property="Background" Value="#263DDE36"/>
</DataTrigger>
<DataTrigger Binding="{Binding DataCellsValue="False"}" Value="False">
    <Setter Property="Background" Value="#26FF5454"/>
</DataTrigger>

这是如何实现的?理想情况下,我只想对所有列使用一个setter,而不为每个列单元重复setter。

谢谢!

2 个答案:

答案 0 :(得分:1)

试试你的Bindings:

{Binding Path=PathToProperty, RelativeSource={RelativeSource AncestorType={x:Type DataGridCell}}}

对于Path,使用Cell的值的PropertyName ..不确定它的值/文本/内容......

有关详细信息,请参阅How do I use WPF bindings with RelativeSource?

编辑:

路径应该是内容。所以完整的解决方案是:

<UserControl.Resources>
<Style TargetType="{x:Type DataGridCell}">
    <Style.Triggers>
        <DataTrigger Binding="{Binding Path=Content, 
                     RelativeSource={RelativeSource AncestorType={x:Type DataGridCell}}}" 
                     Value="True">
            <Setter Property="Background" Value="#263DDE36"/>
        </DataTrigger>
        <DataTrigger Binding="{Binding Path=Content, 
                     RelativeSource={RelativeSource AncestorType={x:Type DataGridCell}}}"  
                     Value="False">
            <Setter Property="Background" Value="#26FF5454"/>
        </DataTrigger>
    </Style.Triggers>
</Style>

答案 1 :(得分:1)

使用DataTrigger,如下所示:

<DataTrigger Binding="{Binding RelativeSource={RelativeSource Self},Path=Content.Text}" Value="1">
     <Setter Property="Background" Value="#263DDE36"/>
</DataTrigger>
  

现在,只要您没有定义DataGridCell's ControlTemplate   以上绑定将正常工作。如果您定义了模板,那么也要更改Content....绑定。