如何解决WPF DataGridTextColumn FontWeight绑定/值转换器不起作用
我对绑定/值转换器的概念非常了解,但是由于某些原因,以下绑定无效。我希望将某些说明(FontWeight
是一个文本字段)从Bold
更改为Description
:
XAML:
<DataGridTextColumn Header="Description"
Binding="{Binding Description}"
FontWeight="{Binding Description,Converter={converters:DescriptionToFontWeightConverter}}"/>
值转换器方法(简体):
public class DescriptionToFontWeightConverter : ConverterMarkupExtension<DescriptionToFontWeightConverter>
{
public override object Convert(object value,Type targetType,object parameter,CultureInfo culture)
{
// Some logic based on the value
// ..
return "Bold"; // I believe I should use "Bold",and not "FontWeights.Bold" here (like it would be with a dependency property,but the problem is that it doesn't go inside the method.
}
public override object ConvertBack(object value,CultureInfo culture) => Binding.DoNothing;
}
我相信问题来自FontWeight属性的绑定路径。例如,如果我将(Path=)Description
替换为RelativeSource={RelativeSource Self}
,它将进入值转换器方法中,但是我认为我无法检索绑定的值。我认为这不是什么异常(至少是我没想到的事情),但是我想知道是否不应该将DataGridTextColum
替换为DataGridTemplateColum
并进一步挖掘吗?
我使用this website中的ConvertMarkupExtension方法,该方法不需要将值转换器指定为静态资源。
使用DataGridColumnTemplate
<DataGridTemplateColumn Header="Description">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Description}">
<TextBlock.Style>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="FontWeight"
Value="{Binding Description,Converter={converters:DescriptionToFontWeightConverter}}"/>
</Style>
</TextBlock.Style>
</TextBlock>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<TextBox Text="{Binding Description}"/>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
感谢您的见解:-)
解决方法
DataGridColumn
不继承任何DataContext
,因此尝试绑定到当前项目的Description
属性总是会失败。
Binding
属性是特殊的。其类型为Binding
,并且您在XAML中定义的绑定最终将应用于在运行时创建的元素。对于DataGridTextColumn
,根据您是否处于编辑模式,这是TextBlock
还是TextBox
。
但是我想知道是否不应该用DataGridTemplateColum替换DataGridTextColum并进一步挖掘
如果您使用DataGridTemplateColumn
并在TextBlock
中定义了CellTemplate
(在TextBox
中定义了CellEditingTemplate
),则实际上可以绑定到通常,当前项目的属性。这是因为模板中的元素已添加到元素树,并且像其他任何 element 一样继承了DataContext
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。