如何在WPF中基于条件运算符改变数据网格单元的样式

时间:2017-02-01 04:07:29

标签: wpf data-binding wpfdatagrid

我正在开发一个wpf应用程序来显示记录,我需要更改特定列中的文本样式" Price"如果它小于50.代码如下:

$keys[j - 1]

所以我需要改变价格文本的前景色,如果它是< 50。

你能建议怎么做吗?

1 个答案:

答案 0 :(得分:2)

你不能在XAML中进行这种比较,因为没有<运营商已定义,但您可以使用转换器:

<DataGrid ItemsSource="{Binding Path= Shares}" HorizontalAlignment="Left" Margin="89,201,0,0" CanUserAddRows="False" AutoGenerateColumns="False" 
                  VerticalAlignment="Top" Height="280" Width="500"
                  xmlns:local="clr-namespace:WpfApplication1">
    <DataGrid.Resources>
        <local:MyConverter x:Key="conv" />
    </DataGrid.Resources>
    <DataGrid.Columns>
        <DataGridTextColumn Header="Company" Binding="{Binding CompanyName}" Width="250" />
        <DataGridTextColumn Header="Share Price" Binding="{Binding Price}">
            <DataGridTextColumn.ElementStyle>
                <Style TargetType="TextBlock">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding Price, Converter={StaticResource conv}}" Value="True">
                            <Setter Property="Foreground" Value="Green" />
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </DataGridTextColumn.ElementStyle>
        </DataGridTextColumn>
    </DataGrid.Columns>
</DataGrid>
namespace WpfApplication1
{
    public class MyConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            decimal d = System.Convert.ToDecimal(value);
            return d < 50;
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotSupportedException();
        }
    }
}

如果Price属性为&lt;属性,则Convert方法返回true。 50然后TextBlock的前景变为绿色。