Q:

Перекрасить Строки DataGrid MVVM

Работаю с MvvmLight. Есть дата грид который заполняется при помощи вьюмодели :

Нужно выделить строки, помеченные красным другим цветом. Я пытаюсь это осуществить с помощью LoadingRow которое привязано к команде во вьюмодели. Разметка XAML:

<DataGrid.Columns>
    <DataGridTextColumn Header="Type" MinWidth="200" Width="*" Binding="{Binding Type}"/>
    <DataGridTextColumn Header="Date" MinWidth="100" Binding="{Binding Date}"/>
    <DataGridTextColumn Header="Count" MinWidth="100" Binding="{Binding CountPaper}"/>
    <DataGridTextColumn Header="Money" MinWidth="100" Binding="{Binding Money}"/>
    <DataGridTextColumn Header="Aq.Price" MinWidth="100" Binding="{Binding AqPr}"/>
</DataGrid.Columns>

Класс вьюмодели
private SolidColorBrush hb = new SolidColorBrush(Colors.Azure);
...
public ICommand RowColor {
    get {
        return new RelayCommand(() => ....);
    }
}

Что писать дальше не знаю, подозреваю что и на этом этапе не все правильно сделал. Подскажите как перекрасить строки, у которых только 1 ячейка не пустая?

A:

Воспользуйтесь конвертером. Для этого нужно создать класс, который преобразует элемент строки в кисть и реализует IValueConverter
public class RowToBrushConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (targetType != typeof(Brush))
        {
            return null;
        }

        // RowType - тип элемента строки
        var r = value as RowType;
        if (r == null || r.Date != null ...)
        {
            return Brushes.White;
        }

        return Brushes.Red;
    }

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

В разметке DataGrid добавляем:
<DataGrid.Resources>
    <local:RowToBrushConverter x:Key="RowToBrushConverter"/>
</DataGrid.Resources>
<DataGrid.RowStyle>
    <Style TargetType="DataGridRow">
        <Setter Property="Background" Value="{Binding Converter={StaticResource RowToBrushConverter}}"/>
    </Style>
</DataGrid.RowStyle>

