2015-12-20 2 views
2

В настоящее время я пытаюсь сделать конвертер, который меняет цвет фона одной ячейки в строке DataGrid. Каждая строка представляет один объект CustomTask. Теперь мой конвертер изменяет backroound всей строки. Это не то, что я хочу, мне нужно изменить фон только одной выбранной ячейки.WPF передать объект конвертеру datagrid и изменить цвет одной ячейки

Мой XAML:

<DataGrid x:Name="customTasksDataGrid" Margin="10,10,10,38" Grid.Column="1" IsReadOnly="True" AutoGenerateColumns="False"> 
    <DataGrid.RowStyle> 
     <Style TargetType="DataGridRow"> 
      <Setter Property="Background" Value="{Binding Path=., Converter={StaticResource converter}}" /> 
     </Style> 
    </DataGrid.RowStyle> 
    <DataGrid.Columns> 
     <DataGridTextColumn Header="ID" Binding="{Binding ID}"/> 
     <DataGridTextColumn Header="Foo" Binding="{Binding Foo}"/> 
     <DataGridTextColumn Header="Bar" Binding="{Binding Bar}"/> 
     ... 
    </DataGrid.Columns> 
</DataGrid> 

Мой конвертер:

[ValueConversion(typeof(DataRowView), typeof(Brush))] 
public class DateToBrushConverter : IValueConverter 
{ 

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     if (value == null) 
      return null; 
     CustomTask t = (CustomTask)value; 
     return new SolidColorBrush(Color.FromArgb(255,0,0,120)); 
    } 

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

Изменение цвета целых Рокс строк совершенно теперь. Как изменить, например, Bar Цвет фона ячейки в зависимости от Foo значение?

ответ

1

Вы должны указать стиль TextColumn индивидуально, а не всю строку.

<DataGrid x:Name="customTasksDataGrid" Margin="10,10,10,38" Grid.Column="1" IsReadOnly="True" AutoGenerateColumns="False"> 
    <DataGrid.Columns> 
     <DataGridTextColumn Header="ID" Binding="{Binding ID}"/> 
     <DataGridTextColumn Header="Foo" Binding="{Binding Foo}"/> 
     <DataGridTextColumn Header="Bar" Binding="{Binding Bar}"> 
      <DataGridTextColumn.ElementStyle> 
       <Style TargetType="{x:Type TextBlock}"> 
        <Setter Property="Background" Value="{Binding Path=., Converter={StaticResource converter}}"/> 
       </Style> 
      </DataGridTextColumn.ElementStyle> 
     </DataGridTextColumn> 
    </DataGrid.Columns> 
</DataGrid> 
+0

Спасибо большое, я пытался сделать это, но я думаю, что я забыл 'Binding Path = .' формы –

+0

Ahh .. нет проблем, рад, что это сработало. –

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