【问题标题】:Datagrid binding to collection, problem with one column converting数据网格绑定到集合,一列转换问题
【发布时间】:2011-07-14 00:25:43
【问题描述】:

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

<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();
    }
}

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

我怎样才能轻松做到这一点? 我觉得写第二个转换器有点愚蠢。

【问题讨论】:

    标签: wpf datagrid binding converters


    【解决方案1】:

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

    【讨论】:

    • 我刚刚使用 DataTemplateSelector 实现了一个解决方案,效果很好。
    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      您可以重复使用转换器来设置背景并使用 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>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-04-15
        • 2011-06-28
        • 2011-04-23
        • 2011-08-05
        • 2012-12-21
        • 2011-04-07
        • 2012-07-13
        相关资源
        最近更新 更多