2009-08-26 7 views
0

ich zwei Objekteigenschaften Kontrolle der beiden Eigenschaften binden, um ein Formular mit TextBox auf sie wie dieses:Wie richtig

 Form f = new Form(); 
     TextBox t = new TextBox(); 
     t.Click += new EventHandler(t_Click); 
     t.LostFocus += new EventHandler(t_LostFocus); 

     Testus tt = new Testus(); 

     t.DataBindings.Add("Left", Testus , "X"); 
     t.DataBindings.Add("Text", Testus , "Test"); 

     f.Controls.Add(t); 
     f.ShowDialog(); 

Und Testus Klasse wie folgt:

class Testus 
{ 
    public string Test 
    { 
     get 
     { 
      return _text; 
     } 
     set 
     { 
      Console.WriteLine("Acomplished: text change"); 
      _text = value; 
     } 
    } 
    private string _text; 

    public int X 
    { 
     get 
     { 
      return x; 
     } 
     set 
     { 
      Console.WriteLine("Acomplished: X changed"); 
      x = value; 
     } 
    } 
    int x; 

    public Testus() 
    { 

    } 
} 

Wie Sie sehen können, Ich binde meine TextBox an Testus-Klasse. Speziell binde ich TextBox.Left an Testus.X und TextBox.Text an Testus.Test. Ich würde gerne feststellen, dass sich der Wert für "Controls Left" auf Testus.X und umgekehrt ändert. Und das gleiche für TextBox.Text vs Testus.Test.

Ich habe Handler für Click und Lost-Focus meiner TextBox-Steuerelement wie folgt hinzugefügt:

static void t_LostFocus(object sender, EventArgs e) 
    { 
     Console.WriteLine("TextBox lost focus"); 
    } 

    static void t_Click(object sender, EventArgs e) 
    { 
     Console.WriteLine("Moving to right..."); 
     ((Control)sender).Left = 100; 
    } 

Und ich diesen Test:

  1. Lauf Anwendung
  2. geben Sie den Text in TextBox
  3. Fokus auf andere Steuerung ändern

Und ich bekomme diese Ergebnisse in Console:

TextBox lost focus 

Und das ist es! Testus.Test ändert seinen Wert nicht !?

Aber wenn ich dies tun:

  1. Lauf Anwendung
  2. Klick auf Textbox (ändern links Wert)

ich diese Ergebnisse erhalten:

Moving to right... 
Acomplished: X changed 

Es scheint, dass Bindung Links zu X funktioniert. Und zu testender Text nicht. Und wann werde ich Orte Bindungen dies ändern:

t.DataBindings.Add("Text", Testus , "Test"); 
    t.DataBindings.Add("Left", Testus , "X"); 

als Text Binderarbeiten und links X ist nicht bindend. Also abschließend: Nur die erste DataBinding funktioniert.

Also meine Frage ist: Wie zwei Eigenschaften von TextBox (Links, Text) an zwei Eigenschaften meines Objekts (Testus) (X, Test) zu binden, damit es gut funktioniert?

Antwort

0

Ich habe es immer so gemacht.

Binding b = new Binding("Test"); 
b.Source = tt; 
t.SetBinding(TextBox.TextProperty, b);