2016-04-16 8 views
0

Bindung würde Ich mag ein Label auf eine Eigenschaft einer Klasse binden und diese versucht:ein Etikett auf eine Eigenschaft

public class Test 
{ 
    public string Name { get; set; } 
} 

Test test = new Test() { Name = "abc" }; 
label.DataBindings.Add ("Text", test, "Name"); 

Dies zeigt, „abc“ auf dem Etikett. Wenn ich die Name-Eigenschaft nach der Datenbindung ändere, spiegelt die Bezeichnung nicht den neuen Wert wider. Was ist los mit dir?

+1

Ihre Klasse hat die INotifyPropertyChanged-Schnittstelle zu implementieren. – LarsTech

+0

[Überprüfen Sie die MSDN-Seite] (https://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged (v = vs.110) .aspx) auf INotifyPropertyChanged Schnittstelle – Steve

Antwort

0

Ich schlage vor, Sie die Bindung andere Weise zu verwenden.

label.DataBindings.Add(new Binding("Text", test, "Name", false, DataSourceUpdateMode.OnPropertyChanged)); 

Ich hoffe, das funktioniert für Sie!

Ein anderer Weg ist die Klasse zu aktualisieren Wert verwenden geändert Ereignisse,

class Test 
{ 
    private string name; 

    public string Name 
    { 
     get { return name; } 
     set 
     { 
      //Check if you are assigning the same value 
      if (Equals(name, value)) 
       return; 
      name = value; 
      OnNameChanged(); 
     } 

     public event EventHandler NameChanged; 

     protected virtual void OnNameChanged() 
     { 
      var handler = NameChanged; 
      if (handler != null) 
       handler(this, EventArgs.Empty); 
     } 
    } 
} 

Falls die erste nicht funktioniert.

Die beste Lösung ist es generische Art und Weise zu tun,

class Test : INotifyPropertyChanged 
{ 
    private string name = ""; 

    public string Name 
    { 
     get { return name; } 
     set { name = value; NotifyPropertyChanged(); } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

    private void NotifyPropertyChanged() 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs("Name")); 
     } 
    } 
} 
+0

versuchen ein Wert geändert Ereignis mit in Ihr Eigentum, genau wie ich in meinem Schnitt erwähnt habe. – thisisbobbs

+0

Die erste Lösung funktioniert auch nicht (ich habe es schon ausprobiert). Der zweite funktioniert vielleicht, aber das ist viel mehr Code, als ich für so ein kleines Problem schreiben möchte ;-) –

+0

Die zweite Lösung funktioniert (neben einem kleinen Syntaxfehler), aber ich hoffe immer noch, dass es ein eleganteres gibt Lösung da draußen. –

Verwandte Themen