2009-08-26 77 views
0

我有一個文本框在窗體上這樣說:如何控制的兩個屬性結合兩個對象的屬性正確

 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(); 

而且Testus類是這樣的:

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() 
    { 

    } 
} 

正如你所看到的,我將我的TextBox綁定到Testus類。具體來說,我將TextBox.Left綁定到Testus.X和TextBox.Text到Testus.Test。我想表明,改變Controls Left值會影響Testus.X值,反之亦然。和TextBox.Text和Testus.Test一樣。

我增加了我的TextBox控件的單擊和LostFocus處理程序是這樣的:

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

我做這個測試:

  1. 運行應用
  2. 文本輸入到文本框
  3. 將焦點轉移到其他控件

我在控制檯中得到這個結果:

TextBox lost focus 

而那就是它! Testus.Test不會改變它的價值!?

但是,當我這樣做:

  1. 運行應用
  2. 點擊文本框(改變左值)

我得到這個結果:

Moving to right... 
Acomplished: X changed 

看來,綁定到X作品。和文字測試不。並且當我將更改綁定的位置時:

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

比文本綁定工作和左X綁定沒有。所以總之:只有第一個DataBinding有效。所以我的問題是:如何將TextBox(Left,Text)的兩個屬性綁定到我的對象(Testus)(X,Test)的兩個屬性,以便它能夠正常工作?

回答

0

我一直這樣做。

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