2009-06-08 36 views
3

我正在使用DataTemplates呈现ItemsControl中的项目。我想为每个项目显示一个工具提示。如果我使用ToolTip =“{Binding MyToolTip,Mode = OneWay}”这样的绑定,WPF会在开始时获取一次工具提示,并在打开时不更新工具提示。WPF DataTemplate:如何创建工具提示实时?

我的项目实现INotifyPropertyChanged,所以原则上我可以为MyToolTip生成更改通知。问题是,工具提示是基于底层模型中的许多信息生成的。这些信息经常变化,为MyToolTip属性生成更改通知既麻烦又低效。另外,我不希望最初生成所有项目的工具提示。相反,我想强制在工具提示打开时生成新的工具提示。我该怎么做?

回答

4

你将不得不使用一点代码隐藏,但它并没有那么糟糕。

<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(); 
} 
+0

我假设你的地方呼吁BindingExpression更新之前,你会被更新的工具提示文本? – micahtan 2009-06-09 00:57:23