Windows窗体数据绑定控件访问吸气剂为所有属性

问题描述 投票:1回答:1

我有一个链接到性能上的其他类中的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多个不相关,但其他性能的吸气剂绑定到完全不同的控制数据绑定很慢。

有我的方式进行数据绑定多个控件在同一个对象的属性,但只能访问实际上是绑定到特定的控件的属性?

.net vb.net winforms data-binding
1个回答
1
投票

当您绑定到一个对象,并更改数据绑定控件绑定的属性值,所有绑定控件将默认刷新自己的价值观和它调用属性的吸气剂。

为了制止这种行为,可以设定ControlUpdateModeBinding属性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_TextBoxGrade_TextBoxAge_TextBox

如果由于某种原因,你要重新加载数据源到控制的价值,你可以通过调用相关ReadValueBinding方法强制控制更新。

例如,要重新加载ThisStudent的所有值到相关TextBox控件,可以使用下面的代码:

BindingContext(ThisStudent).Bindings.Cast(Of Binding) _
    .ToList().ForEach(Sub(x) x.ReadValue())
© www.soinside.com 2019 - 2024. All rights reserved.