比较两个绑定元素并更改单元格颜色

时间:2012-01-23 11:42:38

标签: wpf compare

如果value1> = value2,请告诉我如何将value1单元格设为红色,当value1<值2

<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 个答案:

答案 0 :(得分:4)

我认为有两种方法可以做到这一点,

  1. 您可以在实体中创建一个绑定到此网格的新属性ValueColor,并返回正确的颜色。

  2. 您可以使用返回颜色的转换器将TextBlock的背景与MultiBinding绑定到Value1和Value2。

  3. 这是一个例子

    像这样创建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它会起作用

    希望这有帮助