2016-04-27 3 views
0

Ich versuche, eine Windows-Formularbezeichnung an eine Variable zu binden. wenn ich das Code lable1 ausgeführt wurde als 50 angezeigt, aber wenn ich button1 Erhöhungsschritte verwendet es nicht bis 51. Hier istWie wird die DataBindings-Eigenschaft richtig verwendet?

int x = 50; 
    public int X 
    { 
     get { return x; } 
     set { x = value; } 
    } 
    public Form1() 
    { 
     InitializeComponent(); 
     label1.DataBindings.Add("Text", this, "X", true, DataSourceUpdateMode.OnPropertyChanged); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     X++; 
    } 

TIA mein attemp

Antwort

0

Sie können Ihre Daten in einem anderen setzen ändern Klasse, die informiert werden INotifyPropertyChanged, so dass die UI implementiert wird und aktualisiert:

public partial class Form1 : Form 
{ 
    DataClass dc; 
    public Form1() 
    { 
     InitializeComponent(); 
     dc = new DataClass(); 
     label1.DataBindings.Add("Text", dc, "X", true, DataSourceUpdateMode.OnPropertyChanged); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     dc.X++; 
    } 
} 

public class DataClass : INotifyPropertyChanged 
{ 
    int x = 50; 
    public int X 
    { 
     get { return x; } 
     set 
     { 
      x = value; 
      NotifyPropertyChanged("X"); 
     } 
    } 
    public event PropertyChangedEventHandler PropertyChanged; 
    private void NotifyPropertyChanged(String info) 
    { 
     var handler = PropertyChanged; 
     if (handler != null) 
     { 
      handler(this, new PropertyChangedEventArgs(info)); 
     } 
    } 
} 
+0

danke. Kann ich das für eine statische Klasse verwenden? und kann ich Variable anstelle einer Eigenschaft verwenden? – McLovin

+0

Ich sehe keine Möglichkeit, eine statische Klasse zu verwenden. Die Datenbindung benötigt eine Objektinstanz für die 'Add()' Methode. Sie müssen eine Eigenschaft mit 'DataSourceUpdateMode.OnPropertyChanged' verwenden – Crowcoder

0
int X = 50; 

    public Form1() { 
     InitializeComponent(); 
     label1.Text = X.ToString();    
    } 

    private void button1_Click(object sender, EventArgs e) { 
     X += 1; 
     label1.Text = X.ToString(); 
    } 
0

Ihre Klasse Formular die INotifyPropertyChanged Schnittstelle implementieren werden muss, wie folgt aus:

public partial class Form1 : Form, INotifyPropertyChanged 
    { 

     int x = 50; 
     public int X 
     { 
      get { return x; } 
      set { x = value; OnPropertyChanged("X"); } 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      label1.DataBindings.Add("Text", this, "X", true, DataSourceUpdateMode.OnPropertyChanged); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      X++; 
     } 
     public event PropertyChangedEventHandler PropertyChanged; 

     protected virtual void OnPropertyChanged(string property) 
     { 
      if (PropertyChanged != null) 
       PropertyChanged(this, new PropertyChangedEventArgs(property)); 
     } 
}