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

303
04 июня 2017, 17:35

Работаю с 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 ячейка не пустая?

Answer 1

Воспользуйтесь конвертером. Для этого нужно создать класс, который преобразует элемент строки в кисть и реализует 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>
READ ALSO
Как записать значение переменной в базу данных Unity?

Как записать значение переменной в базу данных Unity?

Как записать значение переменной счетчика в базу данных sqlite в unity? фрагмент кода:

402
Парсинг текста на C#

Парсинг текста на C#

Есть такая проблема: когда делаю построчный парсингtxt файла при помощи рег

585
tableAdapter, параметризованный sql запрос

tableAdapter, параметризованный sql запрос

Как можно передать количество параметров, которое может каждый раз меняться в sql запрос? Мне нужно следующий запрос оформить для всевозможного...

359
Разбор Binding DataGrid и ComboBox

Разбор Binding DataGrid и ComboBox

Очень нужно разобраться с тем как работает ComboBox в таблице DataGrid на WPFМне важно чтобы было грамотно разъяснено и правильно реализовано

323