如何根据DataGrid中的值以编程方式(WPF和C#)设置WPF DataGrid的行背景颜色

时间:2010-08-16 03:30:23

标签: wpf wpf-controls binding wpftoolkit wpfdatagrid

我有一个绑定了接口对象列表的WPF Datagrid。 考虑一下,ClsEmployee类使用属性Empl_Id,Empl_Name,Department,Address和City_name实现I_Employee接口。

列出_emplList;

考虑一下,_emplList有10个项目。

dgEmployeeGrid.ItemsSource = _emplList;

问题: 现在,如果用户单击按钮,那么我应该能够读取City_name。基于City_name,我应该能够通过C#代码动态设置行的颜色(每行的颜色可以不同)。

请帮我怎么做?

提前致谢!

1 个答案:

答案 0 :(得分:2)

构建一个ValueConverter,其中包含网格中相应类型的“值”,然后将行的背景颜色绑定到该字段,并在其中使用ValueConverter来提供Color brush或者你想放在那里的任何其他类型的刷子(有意义)。

修改

这是一个将bool转换为Brush颜色的Converter。这个类有两个名为“True”和“False”的属性,我们将Brush设置为当布尔值与属性匹配时使用。转换器是单向的,不会将画笔转换回布尔值。

XAML创建转换器的实例并设置属性

<cga:BoolToBrushConverter x:Key="trueIsGreen" 
    True="Green" 
    False="Red"/>

C#转换代码

[ValueConversion(typeof(bool), typeof(Brush))]
public class BoolToBrushConverter : IValueConverter
{
    public Brush True
    {
        get; set;
    }

    public Brush False
    {
        get; set;
    }

    public object Convert(object value, Type targetType, 
                          object parameter, CultureInfo culture)
    {
        if (targetType != typeof(Brush))
        {
            return null;
        }

        return ((bool) value) ? True : False;
    }

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

绑定值的示例并转换为使用画笔的对象上的字段

<Ellipse Width="10" Height="10" 
       Fill="{Binding Path=Reviewer.IsMentor, Mode=OneWay, 
                      Converter={StaticResource trueIsGreen}}"/>

我假设您熟悉WPF中的数据绑定,并且不会详细说明解决方案的那个方面,但是当Reviewer.IsMentor为真时,转换器将提供“绿色”画笔(当转换器发送时发送)创建)到椭圆的Fill属性。