我有一个链接到性能上的其他类中的Windows窗体上几个绑定控件。当控制中的任一个的值改变时,所有绑定属性吸气剂被访问。
班级代码:
Public Class Student
Private _Name As String
Public Property Name As String
Get
Return _Name
End Get
Set(value As String)
_Name = value
End Set
End Property
Private _Grade As String
Public Property Grade As String
Get
Return _Grade
End Get
Set(value As String)
_Grade= value
End Set
End Property
Private _Age As Integer
Public Property Age As Integer
Get
Return _Age
End Get
Set(value As Integer)
_Age = value
End Set
End Property
End Class
表格代号:
Public Class Main
Public ThisStudent As New Student
Private Sub Main_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Me.Name_TextBox.DataBindings.Add("Text", Me.ThisStudent, "Name")
Me.Grade_TextBox.DataBindings.Add("Text", Me.ThisStudent, "Grade")
Me.Age_TextBox.DataBindings.Add("Text", Me.ThisStudent, "Age")
End Sub
End Class
当我键入到“姓名” texbox只,用于姓名,年级和年龄的吸气剂都被访问(实际上,我甚至不知道为什么,正在为“名”所访问的吸气本身,因为它应该只设置名字)。在我的实际使用情况,使消气正在做一些额外的验证,这使得每当控制值的变化,然后它检查的30多个不相关,但其他性能的吸气剂绑定到完全不同的控制数据绑定很慢。
有我的方式进行数据绑定多个控件在同一个对象的属性,但只能访问实际上是绑定到特定的控件的属性?
当您绑定到一个对象,并更改数据绑定控件绑定的属性值,所有绑定控件将默认刷新自己的价值观和它调用属性的吸气剂。
为了制止这种行为,可以设定ControlUpdateMode
类Binding
属性Never
:
Me.Name_TextBox.DataBindings.Add("Text", Me.ThisStudent, "Name") _
.ControlUpdateMode = ControlUpdateMode.Never
Me.Grade_TextBox.DataBindings.Add("Text", Me.ThisStudent, "Grade") _
.ControlUpdateMode = ControlUpdateMode.Never
Me.Age_TextBox.DataBindings.Add("Text", Me.ThisStudent, "Age") _
.ControlUpdateMode = ControlUpdateMode.Never
你说的这样,从来没有重装Name_TextBox
,Grade_TextBox
和Age_TextBox
。
如果由于某种原因,你要重新加载数据源到控制的价值,你可以通过调用相关ReadValue
的Binding
方法强制控制更新。
例如,要重新加载ThisStudent
的所有值到相关TextBox
控件,可以使用下面的代码:
BindingContext(ThisStudent).Bindings.Cast(Of Binding) _
.ToList().ForEach(Sub(x) x.ReadValue())