2011-02-22 2 views
2

Я пытаюсь добавить проверку на datagrid в XAML.Настройка XAML Datagrid Цвет текста в строке

В настоящее время я создал метод, который проверяет 3 текстовых поля для допустимого ввода и если false устанавливает значение в коллекции, к которой привязан datagrid, либо к true, либо false. Эта часть работает нормально.

Проблема, с которой я сталкиваюсь, заключается в том, что это действительно работает.

Я создал конвертер:

public override object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
    bool isRowValid = ((bool)value); 

    ConsoleColor validColour = ConsoleColor.Green; 
    ConsoleColor invalidColour = ConsoleColor.Red; 

    if (isRowValid) 
    { 
     return validColour; 
    } 
    else 
    { 
     return invalidColour; 
    } 
    } 

Итак, когда строка недействительна она будет отображаться красным цветом, когда действует она будет отображаться зеленым цветом.

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

Я пытаюсь установить фон для каждой строки, выполнив

<DataGrid.RowBackground> 
    <SolidColorBrush Color="{Binding Path=IsRowValid, Converter={StaticResource RowValidConverter}}" /> 
</DataGrid.RowBackground> 

, но в идеале, я хотел бы, чтобы только настроить цвет текста, а не фон.

Любые предложения о том, как осуществить это было бы весьма признателен,

Спасибо.

ответ

2

Если я правильно понимаю вашу проблему правильно, то я думаю, проще подход, чтобы добавить триггер для Validation.HasError в RowStyle

<DataGrid ...> 
    <DataGrid.RowStyle> 
     <Style TargetType="DataGridRow"> 
      <Setter Property="TextElement.Foreground" Value="Green"/> 
      <Style.Triggers> 
       <Trigger Property="Validation.HasError" Value="True"> 
        <Setter Property="TextElement.Foreground" Value="Red"/> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </DataGrid.RowStyle> 
    <!--...--> 
</DataGrid> 

Или, если вы приободрить это какой-то другой путь с названием собственности IsRowValid в вашем ViewModel, то вы можете просто изменить Trigger на DataTrigger

<DataTrigger Binding="{Binding IsRowValid}" Value="True"> 
    <Setter Property="TextElement.Foreground" Value="Red"/> 
</DataTrigger> 
+0

Спасибо за быстрый ответ. Будет ли это обновление во время выполнения, когда пользователи будут редактировать данные? – Purplegoldfish

+0

@Purplegoldfish: Да, 'Validation.HasError' является прикрепленным свойством, поэтому Trigger всегда будет получать уведомление каждый раз, когда изменяется его значение. Если вы хотите связать себя с вашим свойством 'IsRowValid', то это либо должно быть свойство Dependency, либо вам нужно реализовать INotifyPropertyChanged. –

+0

Спасибо, мне было интересно, почему он не обновлялся, а затем заметил, что я сделал опечатку! отлично работает сейчас. – Purplegoldfish

Смежные вопросы