Как установить цвет фона строки для WPF DataGrid программно (WPF и C#) на основе значения в DataGrid

У меня есть сетка данных WPF, связанная со списком объектов интерфейса. Учтите, что класс ClsEmployee реализует интерфейс I_Employee со свойствами Empl_Id, Empl_Name, Department, Address и City_name.

Список _emplList;

учтите, _emplList имеет 10 элементов.

dgEmployeeGrid.ItemsSource = _emplList;

Вопрос: Теперь, если пользователь нажмет кнопку, я смогу прочитать имя города. Основываясь на City_name, я должен иметь возможность динамически устанавливать цвет (цвет может быть разным для каждой строки) для строк с помощью кода С#.

Пожалуйста, помогите мне, как это сделать?

Заранее спасибо!


person ksvimal    schedule 16.08.2010    source источник


Ответы (1)


Создайте ValueConverter, который принимает " value" соответствующего типа в сетке, а затем привяжите цвет фона строки к этому полю с помощью ValueConverter, чтобы предоставить Цветная кисть или любая другая кисть (которая имеет смысл), которую вы хотели бы добавить туда.

ИЗМЕНИТЬ

Вот конвертер, который преобразует логическое значение в цвет кисти. Этот класс имеет два свойства, называемые «True» и «False», которым мы устанавливаем кисть, которая будет использоваться, когда логическое значение соответствует свойству. Преобразователь является односторонним и не преобразует кисти обратно в логические значения.

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 истинно, преобразователь предоставит «зеленую» кисть (отправленную при создании преобразователя) для свойства «Заливка» эллипс.

person Dave White    schedule 16.08.2010
comment
Привет, Дэйв, я новичок в WPF. Не могли бы вы предоставить код? - person ksvimal; 16.08.2010