Сравните два элемента связывания и измените цвет ячейки - PullRequest
2 голосов
/ 23 января 2012

подскажите, пожалуйста, как сделать ячейку value1 красной, если значение1> = значение2, и зеленой, если значение1 <значение2 </p>

<DataGrid.Columns>
<DataGridTextColumn Width="20" Header="value1" Binding="{Binding value1}" />
<DataGridTextColumn Width="38" Header="value2 " Binding="{Binding value2 }">
      <DataGridTextColumn.ElementStyle>
             <Style TargetType="{x:Type TextBlock}">
                  <Style.Triggers>
                      .........................
                      .........................
                      .........................
                  </Style.Triggers>
             </Style>
      </DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
</DataGrid.Columns>

1 Ответ

4 голосов
/ 23 января 2012

Я вижу два способа сделать это,

  1. Вы можете создать новое свойство ValueColor в вашей сущности, которое привязано к этой сетке и возвращает правильный цвет.

  2. Вы можете привязать фон TextBlock с помощью MultiBinding к Value1 и Value2 с помощью конвертера, который возвращает цвет.

Вот пример

создать MultiValueConverter следующим образом

public class ValuesToColorConverter : IMultiValueConverter
    {
        public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
        {
            int value1 = (int)values[0];
            int value2 = (int)values[1];
            return value1 >= value2 ? Brushes.Red : Brushes.Green;
        }

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

И используйте этот xaml, чтобы показать цвета

<Window.Resources>
    <WpfApplication1:ValuesToColorConverter x:Key="colorConverter" />
  </Window.Resources>
  <Grid>
        <DataGrid ItemsSource="...">
            <DataGrid.Columns>
                <DataGridTextColumn Width="20" Header="value1" Binding="{Binding value1}" />
                <DataGridTextColumn Width="38" Header="value2 " Binding="{Binding value2 }">
                    <DataGridTextColumn.ElementStyle>
                        <Style TargetType="{x:Type TextBlock}">
                            <Setter Property="Background">
                                <Setter.Value>
                                    <MultiBinding Converter="{StaticResource colorConverter}">
                                        <Binding Path="value1"/>
                                        <Binding Path="value2"/>
                                    </MultiBinding>
                                </Setter.Value>
                            </Setter>
                        </Style>
                    </DataGridTextColumn.ElementStyle>
                </DataGridTextColumn>
            </DataGrid.Columns>
        </DataGrid>

    </Grid>

Кстати, у вас есть и другая ошибка, вы должны добавить GridColumns в коллекцию вместо Grid Content, использовать мой xaml, и он будет работать

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...