Привязка всплывающей подсказки WPF не обновляется - PullRequest
2 голосов
/ 27 апреля 2009

Добрый день всем, Я должен работать с устаревшим приложением Winforms, но я хотел бы начать переносить его в WPF. Теперь в нем нет элемента управления всплывающей подсказкой, поэтому я хотел бы использовать объект всплывающей подсказки WPF.

Я создаю один глобальный экземпляр объекта всплывающей подсказки. Я связал элементы управления внутри него, и мое приложение задает текст данных всплывающей подсказки. Я могу вручную показать и скрыть всплывающую подсказку. При первом наведении курсора на объект он отлично получает связанные данные и отлично работает. Когда я перемещаюсь по другому элементу управления, текст подсказки подсказки изменяется, но отображаемые данные никогда не перезагружаются.

Я попытался реализовать событие изменения свойства и использовать интерфейс INotifyPropertyChanged в объекте, к которому привязываю. Похоже, что всплывающая подсказка wpf не прослушивает событие.

Я попытался установить режим привязки на Oneway (это всплывающая подсказка только для отображения).

Всплывающая подсказка создается программно:

// build the tooltip window.
System.Windows.Controls.Image img = new System.Windows.Controls.Image();
img.Width = 50;
img.Height = 60;

// bind the image
System.Windows.Data.Binding imageBinding = new System.Windows.Data.Binding("PatientImage.Data");
imageBinding.Mode = System.Windows.Data.BindingMode.OneWay;
imageBinding.Source = bed;
img.SetBinding(System.Windows.Controls.Image.SourceProperty, imageBinding);

// wrap image in a border
System.Windows.Controls.Border brdr = new System.Windows.Controls.Border();
brdr.BorderBrush = System.Windows.Media.Brushes.Blue;
brdr.Margin = new System.Windows.Thickness(6);
brdr.Child = img;

System.Windows.Controls.WrapPanel wp = new System.Windows.Controls.WrapPanel();

System.Windows.Controls.TextBlock tb = new System.Windows.Controls.TextBlock();
tb.Background = System.Windows.Media.Brushes.LightBlue;
tb.Foreground = System.Windows.Media.Brushes.Blue;

// bind the text block
System.Windows.Data.Binding textBlockBinding = new System.Windows.Data.Binding("TooltipText");
textBlockBinding.Mode = System.Windows.Data.BindingMode.OneWay;
textBlockBinding.Source = bed;
tb.SetBinding(System.Windows.Controls.TextBlock.TextProperty, textBlockBinding);

wp.Children.Add(brdr);
wp.Children.Add(tb);

bedTooltip = new System.Windows.Controls.ToolTip();
bedTooltip.Content = wp;

Есть идеи, почему это не работает? Может быть, мне нужно использовать объект всплывающей подсказки для каждого элемента управления вместо одного глобального в качестве обходного пути?

1 Ответ

0 голосов
/ 14 июня 2011

Привязки задают Source, поскольку они больше не «заботятся» о DataContext, и, следовательно, привязки не обновляются, если изменяется что-либо, кроме самого свойства исходного объекта.

...