C# DataGridCell中的WPF转换器

C# DataGridCell中的WPF转换器,c#,wpf,xaml,C#,Wpf,Xaml,我正在尝试创建一个转换器,它向我显示得到的值是否不是“无”,只需在单元格中写入X,因此我创建了简单元素样式: <DataGridTextColumn.ElementStyle> <Style TargetType="{x:Type TextBlock}"> <Setter Property="Text" Value="{Binding Value, Converter={StaticResource SetBitConverter}}"/>

我正在尝试创建一个转换器,它向我显示得到的值是否不是“无”,只需在单元格中写入X,因此我创建了简单元素样式:

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

现在的问题是,在设置值时,它将不会进入转换器,尽管例如,若我将属性从文本更改为背景,它将毫无问题地进入转换器

样式应用的值的优先级始终低于直接设置的值或绑定设置的值。如果要添加转换器,请将其添加到
DataGridTextColumn
Binding
属性中,或者改用
DataGridTemplateColumn

例如:


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


为什么依赖属性优先级存在?
通常,您不希望始终应用样式,甚至不希望模糊单个元素的本地设置值(否则,通常很难使用样式或元素)。因此,来自样式的值的操作优先级低于本地设置的值

  • 产权制度强制
  • 活动动画或具有保持行为的动画
  • 局部值
  • TemplatedParent模板属性
  • 隐式风格
  • 样式触发器
  • 模板触发器
  • 风格设定者
  • 默认(主题)样式
  • 继承权
  • 依赖项属性元数据的默认值
  • 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();
        }
    }
    
    <DataGridTextColumn Binding="{Binding Value, Converter={StaticResource SetBitConverter}}"/>