挑战MVP:数据绑定到自写类的问题,触发属性变更的事件可否重定义?

火鸟李国平 2006-01-23 11:01:03
我在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特性标记来做到的呢?
...全文
140 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
火鸟李国平 2006-02-08
  • 打赏
  • 举报
回复
UP
lidong6 2006-02-08
  • 打赏
  • 举报
回复
无论用什么方法实现都离不开TextChanged事件.楼主仔细想想.
火鸟李国平 2006-01-24
  • 打赏
  • 举报
回复
UP
火鸟李国平 2006-01-24
  • 打赏
  • 举报
回复
To lidong6(立冬) :
继承不是个好办法,因为我有太多的控件要绑定,而不只是Textbox控件,而且似乎这个办法太笨了,希望有更好的解决办法!
JasonHeung 2006-01-24
  • 打赏
  • 举报
回复
set
{
TextBox tb = value;
if (textBox != null)
{
textBox.TextChanged -= new EventHandler(ConTextChanged);//这里注销
}


textBox = tb;
if (null != textBox)
{
textBox.TextChanged += new EventHandler(ConTextChanged);
}
}
}
JasonHeung 2006-01-24
  • 打赏
  • 举报
回复
set
{
TextBox tb = value;
if (textBox != null)
{
textBox.TextChanged += new EventHandler(ConTextChanged);
}


textBox = tb;
if (null != textBox)
{
textBox.TextChanged -= new EventHandler(ConTextChanged);//这里注销
}
}
}
JasonHeung 2006-01-24
  • 打赏
  • 举报
回复
你可以在你写的类用一个属性来关联到某一个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;
}
}
lidong6 2006-01-24
  • 打赏
  • 举报
回复
redbirdli(火鸟) :
我认为最好的办法是继承Textbox控件,并重写TextChange事件.
ljhkim6 2006-01-24
  • 打赏
  • 举报
回复
up
真相重于对错 2006-01-23
  • 打赏
  • 举报
回复
看看msdn关于异步调用的文章
ms-help://MS.MSDNQTR.2003FEB.2052/cpguide/html/cpovrasynchronousdelegates.htm
lidong6 2006-01-23
  • 打赏
  • 举报
回复
你可以在TextChanged事件里用代码触发
火鸟李国平 2006-01-23
  • 打赏
  • 举报
回复
我倒也是能理解数据绑定技术在控件失去焦点时才去同步数据源的理由,因为我们大多数的程序数据源就是数据库,只把最后的状态更新回去就行了,而我的MyObject不是指向数据库而是一个普通的类对象的,需要实时地跟着绑定控件的Text属性来变化,所以就有需要重定义数据变更通知所用的事件,让控件的值与对象的值实时同步而不是失去焦点时才同步的需求了
火鸟李国平 2006-01-23
  • 打赏
  • 举报
回复
希望还是可以给一个重定义绑定触发事件的方法
火鸟李国平 2006-01-23
  • 打赏
  • 举报
回复
lidong6(立冬) :用数据绑定的目的是为了减少界面同步的代码,要我在TextChanged中自己写的话,和我直接修改控件属性没区别了

110,499

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧