问题描述:
将一个 textBox 与自定义类中一个整型属性 Intx 双向绑定,属性中写了限制大小的逻辑
private ing _intx; public int Intx() {get{return _intx;} set { _intx = value; if(_intx<0)_intx = 0; if(_intx>100)_intx = 100; } }
为了让文本框的内容与数据同步,在 textBox.TextChanged 事件中加入了 textBox.GetBindingExpression(TextBox.TextProperty).UpdateTarget();
现在我打算实现方便的改变数值的功能,所以处理了 textBox.PreviewKeyDown 事件,加入了如下代码
if(e.Key==Key.Down)textBox.Text = (Val(textBox.Text) - 1).ToString; if(e.Key==Key.Up)textBox.Text = (Val(textBox.Text) + 1).ToString;
调试之,发现恐怖现象:当 textBox.Text 为0时,按向下方向键,显示值变成了-1;对于任意初始值,持续按住向下方向键,显示值最后也停在-1。然而无论是断点调试还是 Console.WriteLine() 什么的,textBox.Text 的值竟然都是0!
按住向上方向键,不出所料的最后显示101,而 textBox.Text 的值也是100!
求解……(绑定时没有设置Converter)
textbox引发后台Intx的set的事件是TextBox的lostFocus事件,虽然说,调用textBox.GetBindingExpression(TextBox.TextProperty).UpdateTarget();这个,只是强制前台再次调用Intx的get.
我照着您的代码写了下,如果初始值为0,则textbox显示的只会是-1,与1。
反正,断点进不了
set
{
_intx = value;
if(_intx<0)_intx = 0;
if(_intx>100)_intx = 100;
}