与observerableCollection的WPF绑定不起作用

时间:2017-12-14 07:42:24

标签: wpf vb.net xaml

我在我的WPF项目中使用binding表(db)到listview。但是,如果我启动我的项目,列表视图是空的。我使用linq来获取我的实体框架的数据,而address肯定是正确的字符串。
我的绑定是错误的,如何解决?

xaml

<ListView ItemsSource="{Binding Items}" x:Name="lstvw_Overview" >
        <ListView.View>
            <GridView>
                <GridViewColumn Header="Adresse" 
DisplayMemberBinding="{Binding structureAddress}"/>     
            </GridView>
        </ListView.View>
    </ListView>  


我很确定我的桌子已填满

Public Sub New()
    Initialize()
End Sub

 Dim address As String

 Public Structure Uebersicht
    Dim structureAddress As String
    Shared _items As ObservableCollection(Of Uebersicht) = New ObservableCollection(Of Uebersicht)
    Public Property Items As ObservableCollection(Of Uebersicht)
        Get
            Return _items
        End Get
        Set(value As ObservableCollection(Of Uebersicht))
            _items = value
        End Set
    End Property
End Structure

 Sub Initialize()
    InitializeComponent()
    DataContext = Me
    fillListView()
End Sub

Sub fillListView()
    Using container As New infrastrukturDB_TESTEntities1
        Dim mailAddressList = From tbl_unzustellbarAdressen In container.tbl_unzustellbarAdressen
        For Each mail In mailAddressList
            address = mail.unzustellbarMail.ToString()
            Try
                Uebersicht._items.Add(New Uebersicht With {.structureAddress = address})
            Catch ex As Exception
                MessageBox.Show("error")
            End Try
        Next
    End Using
End Sub

1 个答案:

答案 0 :(得分:1)

对于WPF绑定,始终提供Property定义,Binding类不支持这些字段。因此,您需要将structureAddress转换为属性才能使其正常工作。

由于您将Window(?)类实例设置为自己的DataContext并尝试绑定ItemsSource="{Binding Items}",因此您的窗口类需要包含一个名为Property的{​​{1}}一些集合类型(例如Items)。因此,将您的集合从ObservableCollection移动到外部Window类,并且不要在后备字段上使用Structure Uebersicht

请注意,您不需要Shared上的属性设置器,因为您初始化Items一次,然后您只修改包含的项而不是集合引用本身。