C# WPF DataGridTextColumn FontWeight绑定/值转换器不工作
我很理解绑定/值转换器的概念,但由于某些原因,下面的绑定不起作用。我希望将某些描述的C# WPF DataGridTextColumn FontWeight绑定/值转换器不工作,c#,wpf,binding,C#,Wpf,Binding,我很理解绑定/值转换器的概念,但由于某些原因,下面的绑定不起作用。我希望将某些描述的fontwweight更改为Bold(Description是一个文本字段): XAML: 感谢您的帮助:-)一个DataGridColumn不会继承任何DataContext,因此尝试绑定到当前项的Description属性总是会失败 绑定属性是特殊的。它的类型是Binding,您在XAML中定义的绑定最终将应用于在运行时创建的元素。对于DataGridTextColumn,这是TextBlock或TextBo
fontwweight
更改为Bold
(Description
是一个文本字段):
XAML:
感谢您的帮助:-)一个
DataGridColumn
不会继承任何DataContext
,因此尝试绑定到当前项的Description
属性总是会失败
绑定
属性是特殊的。它的类型是Binding
,您在XAML中定义的绑定最终将应用于在运行时创建的元素。对于DataGridTextColumn
,这是TextBlock
或TextBox
,具体取决于您是否处于编辑模式
但是我想知道我是否应该用DataGridTemplateColum替换DataGridTextColum并进一步挖掘
如果使用
DataGridTemplateColumn
并在CellTemplate
中定义TextBlock
(以及CellEditingTemplate
中定义TextBox
),实际上可以像往常一样绑定到当前项的属性。这是因为模板中的元素被添加到元素树中,并像任何其他元素一样继承了一个DataContext
。OK,谢谢。我做了修改(见更新),它完美地工作了,但我不确定我是否真的允许直接编辑。我真的不知道为什么,但有些事情阻止了我“只是”尝试..@Or8e4m4n:带有TextBlock
的CellEditingTemplate
将显示您处于编辑模式,因此这应该可以工作。
<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;
}
<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>