4

DataTemplatesを使用してItemsControlのアイテムをレンダリングしています。各アイテムのツールチップを表示したいと思います。ToolTip = "{Binding MyToolTip、Mode = OneWay}"などのバインディングを使用すると、WPFは最初にツールチップを1回取得し、開いたときにツールチップを更新しません。

私のアイテムはINotifyPropertyChangedを実装しているので、原則としてMyToolTipの変更通知を生成できます。問題は、ツールチップが基礎となるモデルの多くの情報に基づいて作成されていることです。これらの情報は頻繁に変更されるため、MyToolTipプロパティの変更通知を生成するのは面倒で非効率的です。また、すべてのアイテムのツールチップを最初に作成したくありません。代わりに、ツールチップを開いたときに新しいツールチップを強制的に生成したいと思います。どうすればいいですか?

4

1 に答える 1

5

少しコードビハインドを使用する必要がありますが、それほど悪くはありません。

<object ToolTip="{Binding MyToolTip, Mode=OneWay}" ToolTipOpening="MyToolTip_Opening" />

コードビハインド

private void MyToolTip_Opening(object sender, ToolTipEventArgs e)
{
    DependencyObject depObj = sender as DependencyObject;
    if (depObj == null) return;
    BindingExpression be = BindingOperations.GetBindingExpression(depObj, FrameworkElement.ToolTipProperty);
    if (be != null) be.UpdateTarget();
}
于 2009-06-08T22:39:43.120 に答える