【发布时间】:2013-07-17 08:48:02
【问题描述】:
我再一次遇到了 WPF、XAML 的小问题,可能还有我自己的愚蠢;) 我有一个绑定到 DataContext 的 DataGrid。 DataContext 是我自己创建的一个类中的一个对象数组(像 Employee 类一样简单,具有 FirstName、LastName 等属性......真的没什么特别的。) 我想为行创建一个工具提示,所以我在分配工具提示的地方创建了一个 RowStyle。它首先绑定到名为“状态”的属性。以下代码运行良好:
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Setter Property="ToolTip">
<Setter.Value>
<TextBlock Text="{Binding Status Converter={StaticResource StatusToolTipConverter}}"/>
</Setter.Value>
</Setter>
</Style>
</DataGrid.RowStyle>
但后来我改变了主意。我不想只传递“状态”属性,现在我想传递整个对象(记住:一行 = 一个对象)。或者换句话说:我想将行的 DataContext 传递给我的转换器。由于我要传递的 Object 是 DataContext 本身,所以应该没有太大的变化。所以我把它改成:
<TextBlock Text="{Binding Converter={StaticResource StatusToolTipConverter}}"/>
现在事情开始出错了。转换器将“null”作为值。所以我删除了转换器并再次尝试。工具提示已正确绑定到行中的对象。我可以向自己证明这一点,因为工具提示中显示了正确的对象名称。我什至覆盖了 .ToString() 以便将 Employee 的名称显示为对象名称,它在没有转换器的情况下正确执行。
所以 TL;DR:当对象在没有转换器的情况下正确绑定时,为什么转换器会得到“null”作为值?
【问题讨论】:
-
你肯定
value是空的,而不是像value as string这样的东西(因为它仍然是你的旧StatusToolTipConverter)? -
是的。它是空的。如果我将鼠标悬停在公共对象 Convert(object value, ....) 的 Parameterlist 中的对象上,则它为空。无论如何,转换器本身目前除了“返回值”之外什么都不做。文件中的其他所有内容都已注释掉。
-
VisualStudio 调试输出没有乱说。奇怪的是转换器被调用(断点...),但正如我所说,没有价值。
标签: c# wpf xaml datagrid converter