【发布时间】:2020-09-30 12:46:47
【问题描述】:
我很了解绑定/值转换器的概念,但由于某些原因,以下绑定不起作用。我想将某些描述的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, Type targetType, object parameter, 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>
感谢您的任何见解:-)
【问题讨论】: