2016-04-10 12 views
0

Ich versuche, ein Etikett zur Laufzeit zu erstellen und verbinden es Content Eigenschaft auf einem anderen TextBox Steuerung, die in meinem UserControl ist genannt MyLabelSettings.Wie Label erstellen und dynamisch an seinen Inhalt Eigenschaft in WPF Bindung hinzufügen

Das ist, was ich bisher habe:

Label currCtrl = new Label(); 
MyLabelSettings currCtrlProperties = new MyLabelSettings(); 

// Bindings to properties 
Binding binding = new Binding(); 
binding.Source = currCtrlProperties.textBox_Text.Text; 
binding.Path = new PropertyPath(Label.VisibilityProperty); 
BindingOperations.SetBinding(currCtrl.Content, Label.ContentProperty, binding); 

Die letzte Zeile zeigt einen Fehler, den ich nicht geklappt hat Abbildung wie zu lösen:

für ‚System

Das beste überladene Methode Spiel. Windows.Data.BindingOperations. SetBinding (System.Windows.DependencyObject, System.Windows.DependencyProperty, System.Windows.Data.BindingBase)‘hat einige ungültige Argumente

Ich habe in MyLabelSettings die Umsetzung von INotifyPropertyChanged , die den folgenden Code hat, wenn die TexBox.Text Änderungen

private void TextBox_TextChanged(object sender, TextChangedEventArgs e) 
{ 
    InvokePropertyChanged(new PropertyChangedEventArgs("TextChanged")); 
} 

Gibt es eine bessere Möglichkeit, diese 2 zu binden? Oder mache ich etwas falsch in diesem?

Danke!

Antwort

0

Das Problem ist einfacher, als Sie denken:

Dieses:

binding.Source = currCtrlProperties.textBox_Text.Text; 
binding.Path = new PropertyPath(Label.VisibilityProperty); 
BindingOperations.SetBinding(currCtrl.Content, Label.ContentProperty, binding); 

dies sein sollte:

//The source must be an object, NOT a property 
binding.Source = currCtrlProperties; 
//Since the binding source is not a DependencyObject, we using string to find it's property 
binding.Path = new PropertyPath("TextToBind"); 
BindingOperations.SetBinding(currCtrl, Label.ContentProperty, binding); 

Bevor Sie versuchten, den Wert eines Objekts Eigenschaft zu binden, über Ein Besitz. Nun, Sie verbindlich den Wert an eine Eigenschaft des Objekts über ein Objekt (:

Anmerkungen:

  • Sie versuchen, den Text einer Kontrolle zu binden, die in einer Instanz einer Klasse existiert einfach . gemacht

    MyLabelSettings currCtrlProperties = new MyLabelSettings(); 
    

    ich stütze diese Annahme aus dieser Zeile:

    currCtrlProperties.textBox_Text.Text; 
    

    Welche APPE ars, um eine Art Textkontrolle zu enthalten. Stattdessen möchten Sie den Text einer Eigenschaft binden, die in einer Instanz einer Klasse vorhanden ist, die Sie erstellen, nicht Steuerelement.