Двусторонняя привязка данных для WinForms ComboBox с отдельным источником для Items и SelectedItem - PullRequest
0 голосов
/ 15 января 2019

Надеюсь, мой титул имеет смысл. Я хочу сделать следующее:

  1. Привязка элементов списка со списком
  2. Привязать выбранный элемент к свойству (отдельно от списка)
  3. Обновите SelectedItem ComboBox, как только что-то в объекте изменится (например, когда свойство, связанное с SelectedItem, изменяется программно, SelectedItem ComboBox также изменяется соответственно)

Я уже успел сделать первые две вещи, но застрял в пункте 3. Привязка данных работает только в одну сторону. Это означает, что когда я выбираю новый элемент из ComboBox, объект в коде изменяется соответствующим образом. Но если я изменю объект в коде или если он имеет начальное значение, SelectedItem ComboBox не будет обновлен / предварительно выбран.

cbErledigungsArt.DataSource = _erledigungsArten.ToArray()
cbErledigungsArt.DisplayMember = "Beschreibung"
cbErledigungsArt.ValueMember = "ID"

cbErledigungsArt.DataBindings.Add("SelectedItem", _feststellung, "ErledigungsArt")

Festellung - это пользовательский тип:

Public Class FeststellungDTO
    Public Property Jahr() As Integer
    Public Property ErledigungsArt() As ErledigungsArtDTO
End Class

Erledigungsart - это свойство, связанное с ComboBox

Public Class ErledigungsArtDTO
    Public Property ID() As Integer
    Public Property Beschreibung() As String
End Class

Я хочу сказать, например:

Dim _feststellung As New FeststellungDTO() With {
    .Jahr = 2015,
    .ErledigungsArt = New ErledigungsArtDTO() With {.ID = 0, .Beschreibung = "Bla"}
}
Dim _erledigungsArten As New List(Of ErledigungsArtDTO)(
    {
        New ErledigungsArtDTO() With {.ID = 0, .Beschreibung = "Bla"},
        New ErledigungsArtDTO() With {.ID = 1, .Beschreibung = "Blu"}
    }
)
cbErledigungsArt.DataSource = _erledigungsArten.ToArray()
cbErledigungsArt.DisplayMember = "Beschreibung"
cbErledigungsArt.ValueMember = "ID"

cbErledigungsArt.DataBindings.Add("SelectedItem", _feststellung, "ErledigungsArt")

'SelectedItem will become "Bla"

_feststellung.ErledigungsArt = New ErledigungsArtDTO() With {.ID = 1, .Beschreibung = "Blu"}

'SelectedItem will become "Blu"

'User now selects "Bla" from the ComboBox and the value of _festellung.ErledigungsArt will change accordingly

Возможно ли это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...