Задаване на цвета на текста на XAML Datagrid на ред

Опитвам се да добавя валидиране към мрежа от данни в XAML.

В момента създадох метод, който проверява 3 текстови полета за валиден вход и ако false задава стойност в колекцията, към която е обвързана мрежата с данни, или на 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>

но в идеалния случай бих искал това да коригира само цвета на текста, а не фона.

Всякакви предложения как да се приложи това ще бъдат високо оценени,

Благодаря.


person Purplegoldfish    schedule 22.02.2011    source източник


Отговори (1)


Ако разбирам проблема ви правилно, мисля, че по-лесният подход е да добавите тригер за 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>
person Fredrik Hedblad    schedule 22.02.2011
comment
Благодаря за бързия отговор. Ще се актуализира ли тази актуализация по време на изпълнение, когато потребителите редактират данните? - person Purplegoldfish; 22.02.2011
comment
@Purplegoldfish: Да, Validation.HasError е прикачено свойство, така че тригерът винаги ще получава известия при всяка промяна на стойността му. Ако искате да се свържете с вашето свойство IsRowValid, то или ще трябва да бъде свойство на зависимост, или трябва да внедрите INotifyPropertyChanged - person Fredrik Hedblad; 22.02.2011
comment
Благодаря, чудех се защо не се актуализира, но забелязах, че съм направил печатна грешка! работи чудесно сега наздраве. - person Purplegoldfish; 22.02.2011