2009-08-26 59 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); 
相关问题