Элемент управления Windows Forms с доступом к данным Доступ к получателям для всех свойств - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть несколько связанных элементов управления в форме 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

КогдаЯ вписываю только в текстовое поле «Имя», все доступ к Геттерам для имени, класса и возраста (я на самом деле даже не уверен, почему к Геттеру обращаются непосредственно к «имени», так как это должно быть просто установканазвание).В моем фактическом сценарии использования получатели выполняют некоторую дополнительную проверку, что делает привязку данных ОЧЕНЬ медленной при изменении значения элемента управления, а затем проверяет получатели из более чем 30 других свойств, которые не связаны, но привязаны к совершенно другим элементам управления.

Есть ли способ для меня привязать несколько элементов управления к свойствам одного и того же объекта, но получить доступ только к свойствам, которые фактически связаны с этим конкретным элементом управления?

1 Ответ

0 голосов
/ 05 февраля 2019

Когда вы привязываетесь к объекту и изменяете значение свойства привязки элемента управления с привязкой к данным, все связанные элементы управления по умолчанию перезагружают свои значения, и он вызывает метод получения свойств.

Чтобы остановить этоповедение, вы можете установить 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())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...