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?

Foi útil?

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();
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top