2009-04-27 15 views
2

Guten Nachmittag alle, Ich muss mit einer alten Winforms-Anwendung arbeiten, aber ich möchte mit der Migration zu WPF beginnen. Es hat jetzt kein Tooltip-Steuerelement, daher möchte ich ein WPF-Tooltip-Objekt verwenden.WPF Tooltip Bindung nicht aktualisiert

Ich erstelle eine einzelne globale Instanz eines Tooltip-Objekts. Ich habe die Steuerelemente darin gebunden und meine Anwendung legt den Datenkontext des Tooltips fest. Ich kann den Tooltip manuell ein- und ausblenden. Wenn ich zum ersten Mal über ein Objekt schwebe, nimmt es die gebundenen Daten perfekt auf und funktioniert großartig. Wenn ich über ein anderes Steuerelement wechsle, wird der Tooltip-Datenkontext geändert, aber die angezeigten Daten werden nie neu geladen.

Ich habe versucht, eine Eigenschaft geändert Ereignis und verwenden Sie die INotifyPropertyChanged-Schnittstelle in das Objekt, an das ich binden. Es scheint, dass der WPF-Tooltip nicht auf das Ereignis hört.

Ich habe versucht, den Bindungsmodus auf Oneway einzustellen (es ist ein Display-Tooltip).

Der Tooltip wird programmatisch erstellt:

// 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; 

Jede Idee, warum dies nicht funktioniert? Vielleicht muss ich ein Tooltip-Objekt für jedes Steuerelement anstelle eines einzigen globalen als eine Umgehungsmöglichkeit verwenden?

+0

- Nun, wenn ich einen Tooltip pro Steuerelement machen, funktioniert es. Es ist eine Problemumgehung, aber ich möchte immer noch verstehen, warum es nicht aktualisiert wird, wenn Sie die DataContext-Eigenschaft ändern. Vielleicht war das Tooltip-Objektdesign nie so gedacht? – Jay

Antwort

0

Die Bindungen geben eine Source an, deshalb "kümmern" sie sich nicht mehr um den DataContext und daher werden die Bindungen nicht aktualisiert, wenn sich etwas anderes als die Eigenschaft selbst auf dem Quellobjekt ändert.