C# DataGridCell中的WPF转换器
我正在尝试创建一个转换器,它向我显示得到的值是否不是“无”,只需在单元格中写入X,因此我创建了简单元素样式: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}}"/>
<DataGridTextColumn.ElementStyle>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Text" Value="{Binding Value, Converter={StaticResource SetBitConverter}}"/>
</Style>
</DataGridTextColumn.ElementStyle>
现在的问题是,在设置值时,它将不会进入转换器,尽管例如,若我将属性从文本更改为背景,它将毫无问题地进入转换器 样式应用的值的优先级始终低于直接设置的值或绑定设置的值。如果要添加转换器,请将其添加到
DataGridTextColumn
的Binding
属性中,或者改用DataGridTemplateColumn
例如:
以下是自动生成的默认列与上面的默认列的比较:
为什么依赖属性优先级存在?
通常,您不希望始终应用样式,甚至不希望模糊单个元素的本地设置值(否则,通常很难使用样式或元素)。因此,来自样式的值的操作优先级低于本地设置的值
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}}"/>