DataGridCell中的WPF转换器

时间:2018-03-19 12:02:59

标签: c# wpf xaml

我正在尝试创建转换器,告诉我,如果有价值的东西是其他那么"无"只需在单元格中编写X,这样我就创建了简单的元素样式:

<DataGridTextColumn.ElementStyle>
   <Style TargetType="{x:Type TextBlock}">
   <Setter Property="Text" Value="{Binding Value, Converter={StaticResource SetBitConverter}}"/>
   </Style>
</DataGridTextColumn.ElementStyle>

转换器也很简单

public class SetBitConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        var input = value as string;

        switch (input)
        {
            case "None":
                return "OK";
            default:
                return "X";
        }
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotSupportedException();
    }
}

现在的问题是,在设置值时它不会进入转换器,但是如果我将属性从Text更改为Background,它将进入转换器没有问题。

1 个答案:

答案 0 :(得分:3)

Style应用的值的优先级始终低于直接设置的值,或者在绑定时的优先级。如果您想添加转换器,请将其添加到Binding的{​​{1}}属性或改为使用DataGridTextColumn

E.g:

DataGridTemplateColumn

以下是自动生成的默认列与上面的列的比较:

Comparison

  

为什么依赖属性优先存在?
  通常,您不希望样式始终应用并且甚至不模糊单个元素的本地设置值(否则,通常使用样式或元素将非常困难)。因此,来自样式的值在较低的先例下运行,而不是在本地设置的值。

Technical Background on Value Precedence

  1. 物业系统强制
  2. 动态动画或具有保留行为的动画
  3. 本地值
  4. TemplatedParent模板属性
  5. 隐含风格
  6. 样式触发器
  7. 模板触发器
  8. 样式制定者
  9. 默认(主题)风格
  10. 继承
  11. 依赖项属性元数据的默认值