.net Windows窗体数据绑定控件访问所有属性的getter
我在Windows窗体上有几个绑定控件,它们链接到另一个类的属性。当更改任何一个控件的值时,将访问所有绑定属性的getter 类别代码:.net Windows窗体数据绑定控件访问所有属性的getter,.net,vb.net,winforms,data-binding,.net,Vb.net,Winforms,Data Binding,我在Windows窗体上有几个绑定控件,它们链接到另一个类的属性。当更改任何一个控件的值时,将访问所有绑定属性的getter 类别代码: Public Class Student Private _Name As String Public Property Name As String Get Return _Name End Get Set(value As String) _N
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
当我只在“Name”文本框中输入时,Name、Grade和Age的Getter都被访问(实际上我甚至不知道为什么要访问Name本身的Getter,因为它应该只是设置名称)。在我的实际用例中,getter正在执行一些额外的验证,这使得每当控件值更改时数据绑定非常慢,然后它会检查30+个其他不相关但绑定到完全不同控件的属性的getter
是否有一种方法可以将多个控件数据绑定到同一对象中的属性,但只能访问实际绑定到该特定控件的属性?当绑定到对象并更改数据绑定控件的绑定属性值时,默认情况下,所有绑定控件都将重新加载其值,并调用属性的getter 要停止此行为,可以将类的属性设置为
从不:
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\u TextBox
,Grade\u TextBox
和Age\u TextBox
如果出于任何原因希望将数据源的值重新加载到控件中,则可以通过调用相关的绑定
上的方法来强制更新控件
例如,要将ThisStudent
的所有值重新加载到相关的文本框
控件中,可以使用以下代码:
BindingContext(ThisStudent).Bindings.Cast(Of Binding) _
.ToList().ForEach(Sub(x) x.ReadValue())
另一种方法:在getter中不做任何“额外”操作,只返回值。如果您想进行一些验证,请在方法中进行验证,并从相应的控制事件调用它。这就是Winforms中MVVM失控的原因之一;)这是一个有趣的方法,我将不得不测试它。非常感谢。