根据对象值编辑Datagrid行背景

时间:2013-11-28 14:10:04

标签: c# wpf datagrid .net-4.0

我有以下class

public class Order
{
    public int Id { get; set; }
    public string OrdName { get; set; }
    public int Quant { get; set; }
    public int Supplied { get; set; }
}

DataGrid

<DataGrid x:Name="dgOrders" Margin="5" CanUserAddRows="False" CanUserDeleteRows="False"
              SelectionMode="Extended" ItemsSource="{Binding}"
              SelectionUnit="FullRow" VerticalScrollBarVisibility="Auto"
              Height="300" Width="700" HorizontalAlignment="Left" AutoGenerateColumns="False" Grid.Row="2">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Order Name" Binding="{Binding OrdName}" IsReadOnly="True"/>
            <DataGridTextColumn Header="Quantity" Binding="{Binding Quant}" IsReadOnly="True"/>
            <DataGridTextColumn Header="Supplied" Binding="{Binding Supplied}" IsReadOnly="True"/>
        </DataGrid.Columns>
</DataGrid>

我想要的是,当QuantitySupplied属性相等时,行背景颜色会发生变化。
我尝试使用Event TriggerConverter,但没有运气(可能我没有正确地在xaml中实现它们)。 也尝试从后面的代码执行此操作不起作用(尝试获取像this suggests这样的行实例,但我不断获取该行的null

1 个答案:

答案 0 :(得分:1)

无法在Binding的{​​{1}}属性上设置Value。因此,您需要在数据类型类中添加一个额外的属性:

DataTrigger

然后,使用此属性,您可以使用以下public bool AreQuantityAndSuppliedEqual { return Quantity == Supplied; }

Style

它会像这样使用:

<Style x:Key="EqualRowStyle" TargetType="{x:Type DataGridRow}">
    <Style.Triggers>
        <DataTrigger Binding="{Binding AreQuantityAndSuppliedEqual}" Value="True">
            <Setter Property="Background" Value="LightGreen" />
        </DataTrigger>
    </Style.Triggers>
</Style>