WPF DataTemplate: Como criar uma dica de ferramenta just-in-time?
-
12-09-2019 - |
Pergunta
Eu estou usando DataTemplates para renderizar itens em um ItemsControl. Eu quero mostrar uma dica de ferramenta para cada item. Se eu usar uma ligação, como ToolTip = "{MyToolTip Encadernação, Mode = OneWay}", WPF fica a dica de ferramenta uma vez no início e não atualiza a dica de ferramenta quando ele é aberto.
Os meus itens implementar INotifyPropertyChanged, por isso, em princípio, eu poderia gerar notificações de alteração para MyToolTip. O problema é, a dica é produzida com base em vários pedaços de informação no modelo subjacente. Estas peças de mudança informações frequentemente e seria tanto pesado e ineficiente para gerar notificações de alteração para a propriedade MyToolTip. Além disso, eu não quero dicas de ferramentas para todos os itens a serem produzidos inicialmente. Em vez disso eu gostaria de forçar uma nova dica para ser gerado quando a dica de ferramenta é aberta. Como posso fazê-lo?
Solução
Você terá que usar um pouco de código-behind, mas não é tão ruim assim.
<object ToolTip="{Binding MyToolTip, Mode=OneWay}" ToolTipOpening="MyToolTip_Opening" />
No code-behind
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();
}