Member 13404587 Ответов: 2

Как правильно привязать данные к combobox с помощью объекта bindingsource в конструкторе.


Привет:

Я понимаю, как программно привязать данные к ComboBox:

например:

ComboBox1.DataSource = data.EmployeeList()
ComboBox1.DisplayMember = "Name"
ComboBox1.ValueMember = "EmployeeID"


Однако то, что я пытаюсь сделать, - это связать данные с помощью конструктора и исходного объекта привязки.

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

Как привязать список с помощью конструктора к Combobox?

Что я уже пробовал:

Сначала я создал источник данных:

Public Class Employee

    Public Property EmployeeID As String
    Public Property Name As String

End Class


Public Class Data

    Public Function Data() As List(Of Employee)

        Return New List(Of Employee)() From { _
         New Employee() With { _
          .Name = "George Benson", _
          .EmployeeID = 321
         }, _
         New Employee() With { _
          .Name = "Gladys Knight", _
          .EmployeeID = 322
         }, _
         New Employee() With { _
          .Name = "David Bowie", _
          .EmployeeID = 323
         }, _
         New Employee() With { _
          .Name = "Steve Wonder", _
          .EmployeeID = 324
         }, _
         New Employee() With { _
          .Name = "Tina Turner", _
          .EmployeeID = 325
         }
        }
    End Function

End Class



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

Примечание: это не полная реализация MVP или MVPM, это только для демонстрации.

Public Class EmployeeViewModel

    Private _listEmployees As Data

    Sub New()
        _listEmployees = New Data()
    End Sub

    Public ReadOnly Property EmployeeList() As List(Of Employee)
        Get
            Return _listEmployees.Data()
        End Get
    End Property

End Class

2 Ответов

Рейтинг:
2

Graeme_Grant

У меня есть пример проекта в статье, который делает то, что вы хотите, со списком, но ComboBox-это то же самое: Работа с JSON в C# и VB[^] Загрузите код (v1. 3) и посмотрите на версию VB WinFormSimpleCollection проект. Это делается как приложение MVVM-esque. Он включает в себя эту маленькую вспомогательную функцию для привязки списка моделей к элементу управления:

Public Shared Sub BindList(Of TModel)(ctrl As ListControl, dataSource As IList(Of TModel), displayMember As String, valueMember As String)

    ctrl.DisplayMember = displayMember
    ctrl.ValueMember = valueMember
    ctrl.DataSource = dataSource

End Sub

Обновление: это также может быть полезно: c# - WinForms. Привязка данных времени разработки к свойству дочернего элемента управления-переполнение стека[^]


Member 13404587

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

Member 13404587

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

Graeme_Grant

Как я уже упоминал, скачайте код и попробуйте его. :)

Member 13404587

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

Рейтинг:
2

RickZeeland

Вот отличная статья, описывающая несколько способов привязки данных: Подробное Руководство По Привязке Данных[^]