C# 将DataGridRow作为对象传递给转换器

C# 将DataGridRow作为对象传递给转换器,c#,wpf,xaml,datagrid,converter,C#,Wpf,Xaml,Datagrid,Converter,我再一次对WPF、XAML和我自己的愚蠢有点问题;) 我有一个绑定到DataContext的DataGrid。DataContext是我自己创建的一个类中的一个对象数组(类似于带有FirstName、LastName等属性的类Employee之类的简单对象,其实没什么特别的) 我想为行创建一个工具提示,所以我在指定工具提示的地方创建了一个行样式。它首先绑定到名为“Status”的属性。以下代码运行良好: <DataGrid.RowStyle> <Style TargetType

我再一次对WPF、XAML和我自己的愚蠢有点问题;) 我有一个绑定到DataContext的DataGrid。DataContext是我自己创建的一个类中的一个对象数组(类似于带有FirstName、LastName等属性的类Employee之类的简单对象,其实没什么特别的) 我想为行创建一个工具提示,所以我在指定工具提示的地方创建了一个行样式。它首先绑定到名为“Status”的属性。以下代码运行良好:

<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
    <Setter Property="ToolTip">
        <Setter.Value>
            <TextBlock Text="{Binding Status Converter={StaticResource StatusToolTipConverter}}"/>
        </Setter.Value>
    </Setter>
</Style>
</DataGrid.RowStyle>

但后来我改变了主意。我不想只传递“Status”属性,现在我想传递整个对象(记住:一行=一个对象)。或者换句话说:我想将行的DataContext传递给我的转换器。因为我想要传递的对象是DataContext本身,所以应该没有太多的更改。所以我把它改成:

<TextBlock Text="{Binding Converter={StaticResource StatusToolTipConverter}}"/>

现在事情开始出问题了。转换器获取“null”作为值。所以我删除了转换器,然后再试一次。工具提示已正确绑定到行中的对象。我可以自己证明这一点,因为工具提示中显示了正确的对象名称。我甚至重写了.ToString(),这样雇员的名字就可以显示为对象名,这在没有转换器的情况下是正确的


so TL;DR:当对象在没有转换器的情况下被正确绑定时,为什么转换器会得到“null”值?

我找到了一个小的解决方法。我创建了一个名为“Self”的属性,它返回“this”。工具提示现在绑定到“Self”。它可以工作。

并且您肯定
value
是空的,而不是像
value as string
那样的东西(因为它仍然是旧的
状态工具转换程序
)?是的。它是空的。如果将鼠标悬停在public object Convert(对象值,…)参数列表中的对象上,则该值为空。转换器本身目前只执行“返回值”操作。其他所有内容都已在文件中注释掉。VisualStudio调试输出不会显示任何不正常的内容。奇怪的是,转换器被调用(断点…),但正如我所说,没有值。