WPF中DataGridCell的转换器

3

我正在尝试创建一个转换器,如果某个东西的值不是“None”,就在单元格中写入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个回答

6
样式应用的值始终比直接设置的值或者类似于您的情况下通过绑定设置的值优先级低。如果想要添加转换器,请将其添加到DataGridTextColumnBinding属性中,或者使用DataGridTemplateColumn代替。

E.g.:

<DataGridTextColumn Binding="{Binding Value, Converter={StaticResource SetBitConverter}}"/>

这里是自动生成的默认列和上述列的比较:

Comparison


为什么存在依赖属性优先级?
通常情况下,您不希望样式总是应用并遮盖单个元素的本地设置值(否则,使用样式或元素将非常困难)。因此,来自样式的值在本地设置值之前具有较低的优先级。
技术背景:关于值优先级的技术背景
  1. 属性系统强制
  2. 活动动画或具有Hold行为的动画
  3. 本地值
  4. TemplatedParent模板属性
  5. 隐式样式
  6. 样式触发器
  7. 模板触发器
  8. 样式设置器
  9. 默认(主题)样式
  10. 继承
  11. 依赖属性元数据的默认值

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接