我在WinForm下开发了自己的一个类,用
textBox1.DataBindings.Add("Text",MyObject,"Text");
的方式进行了数据绑定,确实可以实现textBox1.Text属性改变时,自动更改我MyObject对象的Text属性,但我设了断点观察:
只有textBox1控件失去焦点时,新的.Text的值才会被通知到MyObject.Text;而事实上我希望textBox1.Text值改变的通知是像TextChanged这样的事件中通知给MyObject.Text属性去实时更新,而不是非得等textBox1失去焦点了,才去通知MyObject.Text,也就是说我希望尽管现在焦点仍然在textBox1上,我连续输入了N个字符,MyObject.Text就被逐一通知了四次值的改变;一句话来说就是:数据绑定触发数据绑定的事件可不可以不是Leave,而是自由定义的任意事件(如TextChange),也就是数据绑定可不可以重定义触发数据源改变的那个事件呢?
是不是又是通过一些attribute特性标记来做到的呢?

解决方案 »

  1.   

    我倒也是能理解数据绑定技术在控件失去焦点时才去同步数据源的理由,因为我们大多数的程序数据源就是数据库,只把最后的状态更新回去就行了,而我的MyObject不是指向数据库而是一个普通的类对象的,需要实时地跟着绑定控件的Text属性来变化,所以就有需要重定义数据变更通知所用的事件,让控件的值与对象的值实时同步而不是失去焦点时才同步的需求了
      

  2.   

    你可以在TextChanged事件里用代码触发
      

  3.   

    看看msdn关于异步调用的文章
    ms-help://MS.MSDNQTR.2003FEB.2052/cpguide/html/cpovrasynchronousdelegates.htm
      

  4.   

    lidong6(立冬) :用数据绑定的目的是为了减少界面同步的代码,要我在TextChanged中自己写的话,和我直接修改控件属性没区别了
      

  5.   

    redbirdli(火鸟) :
    我认为最好的办法是继承Textbox控件,并重写TextChange事件.
      

  6.   

    你可以在你写的类用一个属性来关联到某一个TextBox,然后在自己内部添加对TextBox的TextChanged事件的注册和响应,这样封装性和通用性都很强。例如:class MyClass
    {
        Public TextBox ConTextBox
    {
    get
    {
    return textBox;
    }
    set
    {
    TextBox tb = value;
    if (textBox != null)
    {
    textBox.TextChanged += new EventHandler(ConTextChanged);
    }
    textBox = tb;
    if (null != textBox)
    {
    textBox.TextChanged += new EventHandler(ConTextChanged);
    }
    }
    }TextBox textBox = null;void ConTextChanged(object sender,EventArgs e)
    {
    this.Text = ContextBox.Text;
    }
    }
      

  7.   

    set
    {
    TextBox tb = value;
    if (textBox != null)
    {
    textBox.TextChanged += new EventHandler(ConTextChanged);
    }
    textBox = tb;
    if (null != textBox)
    {
    textBox.TextChanged -= new EventHandler(ConTextChanged);//这里注销
    }
    }
    }
      

  8.   

    set
    {
    TextBox tb = value;
    if (textBox != null)
    {
    textBox.TextChanged -= new EventHandler(ConTextChanged);//这里注销
    }
    textBox = tb;
    if (null != textBox)
    {
    textBox.TextChanged += new EventHandler(ConTextChanged);
    }
    }
    }
      

  9.   

    To  lidong6(立冬) :
    继承不是个好办法,因为我有太多的控件要绑定,而不只是Textbox控件,而且似乎这个办法太笨了,希望有更好的解决办法!
      

  10.   

    无论用什么方法实现都离不开TextChanged事件.楼主仔细想想.