WPF DataTemplate: как создать всплывающую подсказку точно в срок? - PullRequest
4 голосов
/ 09 июня 2009

Я использую DataTemplates для отображения элементов в ItemsControl. Я хочу показать всплывающую подсказку для каждого элемента. Если я использую привязку, например ToolTip = "{Binding MyToolTip, Mode = OneWay}", WPF получает подсказку один раз в начале и не обновляет подсказку при ее открытии.

Мои элементы реализуют INotifyPropertyChanged, поэтому в принципе я мог генерировать уведомления об изменениях для MyToolTip. Проблема в том, что всплывающая подсказка создается на основе большого количества информации в базовой модели. Эти фрагменты информации часто изменяются, и было бы громоздким и неэффективным генерировать уведомления об изменениях для свойства MyToolTip. Кроме того, я не хочу, чтобы подсказки для ВСЕХ предметов создавались изначально. Вместо этого я бы хотел, чтобы новая подсказка генерировалась при ее открытии. Как я могу это сделать?

1 Ответ

4 голосов
/ 09 июня 2009

Вам придется использовать немного кода, но это не так уж и плохо.

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