【问题标题】:How to add ListView Items via Binding by Entity Framework / Linq如何通过实体框架/Linq 绑定添加 ListView 项目
【发布时间】:2018-05-27 09:26:31
【问题描述】:

如何通过Entity Framework/Linq绑定添加ListViewItems?

我的 ListView 在带有绑定的 xaml 中:

<ListView x:Name="lstvw_Overview" HorizontalAlignment="Left" Height="310" Margin="11,89,0,0" VerticalAlignment="Top" Width="676">
        <ListView.View>
            <GridView>
                <GridViewColumn Header="Adresse" DisplayMemberBinding="{Binding address}"/>
            </GridView>
        </ListView.View>
</ListView>

这是我的代码

Public Sub New()
    Initialize()
End Sub
Dim address As String
Dim items As ObservableCollection(Of Uebersicht)
Public Structure Uebersicht
    Private _address As String
    Public Property address As String
        Get
            Return _address
        End Get
        Set(value As String)
            _address = value
        End Set
    End Property
End Structure
Sub Initialize()
    InitializeComponent()
    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
                items.Add(New Uebersicht With {.address = address})
            Catch ex As Exception
                MessageBox.Show("Error")
            End Try

        Next
    End Using
End Sub

编辑:尝试了ObserverableCollection,但现在我得到了NullReferenceException! 如果我调试,地址得到数据..不为空

【问题讨论】:

  • 在 C# 中,您有 ObservableCollection,这是您在 .xaml 上链接为 itemSource 的内容。不确定它在 vb 中是如何工作的,但应该有类似的东西。当您不使用 itemSource 时,您必须告诉 Dispatcher 使用 INotifyPropertyChanged 更新列表,但同样,我只从 C# 中知道,但可能会为您提供搜索解决方案的线索。
  • @Nekeniehl ObservableCollection 是一个 .NET Framework 类,因此支持所有语言。
  • @Raizzen "link as itemSource on the .xaml" 意味着您应该将 ListView 的 ItemsSource 属性绑定到您的项目类的 ObservableCollection。当您编写 DisplayMemberBinding="{Binding address}" 时,项目类应该有一个名为 address 的公共属性。
  • 就像我说的我对vb一无所知,但总是学习东西的好时机,谢谢!
  • @Nekeniehl, Clemens ok ObserverableCollection.. 试试看

标签: wpf vb.net linq xaml binding


【解决方案1】:

由于您将strings 添加到ListView,因此您不应绑定到address 属性,而是绑定到源对象本身:

<ListView x:Name="lstvw_Overview" HorizontalAlignment="Left" Height="310" Margin="11,89,0,0" VerticalAlignment="Top" Width="676">
    <ListView.View>
        <GridView>
            <GridViewColumn Header="Adresse" DisplayMemberBinding="{Binding}"/>
        </GridView>
    </ListView.View>
</ListView>

编辑:您需要先初始化ObservableCollection,然后才能向其中添加项目。为了能够绑定到ObservableCollection,您必须将其作为属性公开:

Public Sub New()
    Initialize()
End Sub

Dim address As String

Private _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

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

XAML:

<ListView ItemsSource="{Binding Items}" HorizontalAlignment="Left" Height="310" Margin="11,89,0,0" VerticalAlignment="Top" Width="676">
    <ListView.View>
        <GridView>
            <GridViewColumn Header="Adresse" DisplayMemberBinding="{Binding address}"/>
        </GridView>
    </ListView.View>
</ListView>

【讨论】:

  • 又是你啊.. xD 但只有在 xaml 中使用 Binding,程序如何知道要选择哪个变量
  • 好的,现在可以了。我只是在我的 gui 中得到了错误的输出,但我想我可以自己修复它。我很抱歉烦你我还在学习:(
  • 在那个版本中 'Private _items As ObservableCollection(Of Uebersicht) = New ObservableCollection(Of Uebersicht)' 它强调了 _items -> structur member 的初始化器仅对 shared-member/constants 有效
  • setter 应该是 Set(value As ObservableCollection(Of Uebersicht))。我稍微编辑了我的答案。
  • 它仍然强调 Private _items,顺便说一句,什么 xaml 是正确的?你的答案有两个
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-29
  • 2017-07-07
相关资源
最近更新 更多