2010-11-10 2 views
1

У меня есть сетка значений в DataGrid. В каждой ячейке у меня есть одно из 4 значений, я хочу, чтобы каждое значение имело связанный цвет.WPF - XAML - Триггер данных без привязки/только триггер значения

В прошлом все триггеры данных были в формате;

<DataTrigger Binding="{Binding Status}" Value="R"> 
    <Setter Property="xcdg:DataRow.Background" Value="Pink" /> 
</DataTrigger> 

Но мне нужно что-то в этом формате;

<DataTrigger Binding="{Binding *}" Value="R"> 
    <Setter Property="xcdg:DataRow.Background" Value="Pink" /> 
</DataTrigger> 

Так, чтобы значение ячейки было проверено. Причина, по которой я не могу использовать явные привязки, состоит в том, что количество столбцов и их имен является динамическим, я использую расширение CustomTypeDescriptor, чтобы вывести столбцы и строки для входа в сетку.

Заранее благодарен!

ответ

0
<DataTrigger Binding="{Binding Path=Content, RelativeSource={x:Static RelativeSource.Self}}" Value="Failure"> 
    <Setter Property="xcdg:DataRow.Background" Value="Red" /> 
</DataTrigger> 

Мне нужно было использовать Относительный источник.

В дополнение к тому, что я использовал, было;

 <xcdg:DataGridControl.Resources> 
      <c:ColorConverter x:Key="colorConverter" /> 
      <Style TargetType="{x:Type xcdg:DataCell}"> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding Path=IsSelected, RelativeSource={RelativeSource AncestorType={x:Type xcdg:DataRow}}}" Value="False"> 
         <Setter Property="xcdg:DataCell.Background" Value="{Binding RelativeSource={x:Static RelativeSource.Self}, Converter={StaticResource colorConverter}}" /> 
        </DataTrigger> 
        <DataTrigger Binding="{Binding Path=IsDirty, RelativeSource={RelativeSource AncestorType={x:Type xcdg:DataRow}}}" Value="True"> 
         <Setter Property="xcdg:DataCell.Background" Value="{Binding RelativeSource={x:Static RelativeSource.Self}, Converter={StaticResource colorConverter}}" /> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </xcdg:DataGridControl.Resources> 

Где мой Цветовой преобразователь выглядит примерно так:

[ValueConversion(typeof(DataCell), typeof(Brush))] 
public class ColorConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     var cell = (DataCell)value; 
     var content = (string)cell.Content; 

     if (content == null || cell.ParentRow.IsSelected) 
     { 
      return DependencyProperty.UnsetValue; 
     } 

     if (content == "Unknown") 
     { 
      return new SolidColorBrush(Colors.LightYellow); 
     } 

     ... 

     return DependencyProperty.UnsetValue; 
    } 

    public object ConvertBack(object value, Type targetType, 
     object parameter, CultureInfo culture) 
    { 
     return null; 
    } 
} 

Моя единственная проблема теперь в том, что при прокрутке цвета фона не обновляются при повторном использовании DataRows.

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

0

Возможно ли использовать ValueConverter в вашем переплетении? Таким образом, вы можете проверить конвертер, значение которого он должен вернуть.