1

我在以自定义方式绑定我的数据网格的一列时遇到一个问题。所以,我有这段代码:

<DataGridTemplateColumn Header="State">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <Label Background="" Content="{Binding Path=., Converter={StaticResource measureConv}}" />
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

我的转换器:

public class MeasureToStateConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        Measure m;
        try
        {
            m = (Measure)value;
            if (m.Value > 100)
            {
                return "Alarm";
            }
        }
        catch (Exception ex)
        {
            Debugger.Log(0, "Convertery", "Bład Convertera MeasureToState" + ex.Message);
        }
        return "Normal";
    }

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

内容和背景属性是自定义的。我使用转换器来检查我的集合对象是否满足某些条件结束返回字符串是或否,但如果我想在一种颜色背景中有字符串字段是,如果它是另一种颜色。

我怎么做才容易?我觉得写第二个转换器有点愚蠢。

4

3 回答 3

1

您可以DataTemplates使用两个各自的标签创建两个,并使用 aDataTemplateSelector而不是值转换器来获得正确的模板。

于 2011-03-12T11:10:21.183 回答
0

您可以重复使用转换器来设置背景并使用 DataTrigger 更改内容。
我假设您的 Measure 对象中的字段称为 Value。

应用转换器来显示 DataGrid 中的列内容:

<DataGridTextColumn 
   Header="State" 
   Width="SizeToHeader"
   Binding="{Binding Value, Converter={StaticResource measureConv}}" 
   CellStyle="{StaticResource ResourceKey=BackgroundCellStyle}"
   FontSize="20" />

应用转换器来改变样式:

<Window.Resources>
  <Style TargetType="{x:Type DataGridCell}" x:Key="BackgroundCellStyle">
    <Setter Property="Background" Value="Aqua"/>
    <Style.Triggers>
      <DataTrigger Binding="{Binding Path=Value, Converter={StaticResource measureConv}}" Value="Alarm">
        <Setter Property="Background" Value="Chartreuse"/>
      </DataTrigger>
    </Style.Triggers>
  </Style>
</Window.Resources>
于 2011-03-12T16:49:34.837 回答
0

将 Label 的 Background 属性绑定到它自己的 Content 属性,并使用转换器返回所需的 Brush:

<Label Background="{Binding Path=Content, RelativeSource={RelativeSource Self}, Converter={StaticResource ContentToBrushConverter}"/>

转换器将接收 Content 属性的值...如果等于“是”,则返回 Brushes.Green,如果等于“否”,则返回 Brushes.Red

于 2011-03-12T15:27:17.373 回答