我正在尝试创建转换器,告诉我,如果有价值的东西是其他那么"无"只需在单元格中编写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,它将进入转换器没有问题。
答案 0 :(得分:3)
Style应用的值的优先级始终低于直接设置的值,或者在绑定时的优先级。如果您想添加转换器,请将其添加到Binding
的{{1}}属性或改为使用DataGridTextColumn
。
E.g:
DataGridTemplateColumn
以下是自动生成的默认列与上面的列的比较:
为什么依赖属性优先存在?
通常,您不希望样式始终应用并且甚至不模糊单个元素的本地设置值(否则,通常使用样式或元素将非常困难)。因此,来自样式的值在较低的先例下运行,而不是在本地设置的值。
Technical Background on Value Precedence