Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF DataGridTextColumn FontWeight绑定/值转换器不工作_C#_Wpf_Binding - Fatal编程技术网

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>