代码之家  ›  专栏  ›  技术社区  ›  LeonidasFett

WinForms的双向数据绑定组合框,具有单独的项源并选择Editem

  •  0
  • LeonidasFett  · 技术社区  · 6 年前

    我希望我的头衔有意义。我想做以下工作:

    1. 将组合框项绑定到列表
    2. 将SelectedItem绑定到属性(与列表分开)
    3. 一旦对象中的某些内容更改,则更新组合框的SelectedItem(例如,一旦绑定到SelectedItem的属性以编程方式更改,则组合框的SelectedItem也会相应更改)

    我已经做到了前两件事,但我坚持第三点。数据绑定只能单向工作。也就是说,当我从组合框中选择一个新项时,代码隐藏中的对象会相应地更改。但是,如果我在代码隐藏中更改对象,或者如果它有一个初始值,则组合框的SelectedItem不会被更新/预选。

    cbErledigungsArt.DataSource = _erledigungsArten.ToArray()
    cbErledigungsArt.DisplayMember = "Beschreibung"
    cbErledigungsArt.ValueMember = "ID"
    
    cbErledigungsArt.DataBindings.Add("SelectedItem", _feststellung, "ErledigungsArt")
    

    Festellong是一种自定义类型:

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

    Erledigungsart是绑定到组合框的属性

    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
    

    这可能吗?

    0 回复  |  直到 6 年前