首页 新闻 会员 周边 捐助

数据绑定验证后的处理

0
[已关闭问题] 关闭于 2010-12-15 18:40

有一个数据类:

Public Class MyData
Implements ComponentModel.INotifyPropertyChanged
Private _myint As Int32

Public Event PropertyChanged(ByVal sender As Object, ByVal e As System.ComponentModel.PropertyChangedEventArgs) Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged

Public Property MyInt As Int32
Get
Return _myint
End Get
Set(ByVal value As Int32)
_myint
= Math.Max(Math.Min(value, 25), 0) '将数据限制在0~25的范围内
RaiseEvent PropertyChanged(Me, New ComponentModel.PropertyChangedEventArgs("MyInt"))
End Set
End Property
End Class

 

我将它绑定到一个 TextBox 上:

Dim x As New MyData
MyTextBox.SetBinding(TextBox.TextProperty,
New Binding("MyInt") With {.Mode = BindingMode.TwoWay, .Source = x, .UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged})

 

我需要达到的效果是,当 MyTextBox 的显示值达到25后往里面输入数字,能自动恢复到25。然而实际情况却是:若显示值小于25,输入数字后大于25,显示值自动恢复到25;若显示值等于25,输入数字后就不受数据类里面的逻辑控制,具体流程如下:(初始值0,输入光标放在输入框最后面)

按1:闪一下01,恢复到1

按1:11

按1:闪一下111,恢复到25

按1:251

按1:2511

……

令我惊讶的是,在后面显示值超过25的情况下,MessageBox.Show(MyTextBox.Text) 仍然是25,就是说 Text 属性值和显示值不一致

请大家帮忙,如何才能让我设置的逻辑发挥作用?

孔雀的主页 孔雀 | 初学一级 | 园豆:49
提问于:2010-11-30 15:22
< >
分享
所有回答(1)
0

你的逻辑就是保证textbox的值不超过25呀,当然不会出现>25的值的情况。

请你搞清楚,event.value就是整个textbox的值,可不是你随手输入的数字。跟显示不显示没关系。

你输入的值,在程序里认为的就是整个textbox返回给后台的值就叫输入。不是你偷懒前面的保留后面输入的叫输入。

 

茂茂 | 园豆:2894 (老鸟四级) | 2010-12-01 09:33
还有在textbox的值>=25的时候,如果你的值显示不是25,那么你的程序就有问题了
支持(0) 反对(0) 茂茂 | 园豆:2894 (老鸟四级) | 2010-12-01 09:35
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册