【问题标题】:Passing DataGridRow as Object to a Converter将 DataGridRow 作为对象传递给转换器
【发布时间】: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


【解决方案1】:

我找到了一些解决方法。我创建了一个名为“Self”的属性,它返回“this”。 ToolTip 现在绑定到“Self”。它有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-25
    • 2016-07-03
    • 2011-11-19
    • 2021-07-12
    • 2010-10-30
    相关资源
    最近更新 更多