如何在WPF上的Listview中添加项目

时间:2014-12-12 12:27:02

标签: wpf vb.net listview

我可以在ListView中添加列,但在ListView中添加项目非常困难。这是我的代码:

    Dim myGridView As New GridView
    myGridView.AllowsColumnReorder = True
    myGridView.ColumnHeaderToolTip = "Employee Information"

    Dim gvc1 As New GridViewColumn
    gvc1.DisplayMemberBinding = New Binding("FirstName")
    gvc1.Header = "FirstName"
    gvc1.Width = 100
    myGridView.Columns.Add(gvc1)
    Dim gvc2 As New GridViewColumn
    gvc2.DisplayMemberBinding = New Binding("LastName")
    gvc2.Header = "Last Name"
    gvc2.Width = 100
    myGridView.Columns.Add(gvc2)
    Dim gvc3 As New GridViewColumn()
    gvc3.DisplayMemberBinding = New Binding("EmployeeNumber")
    gvc3.Header = "Employee No."
    gvc3.Width = 100
    listview.View = myGridView

我刚刚创建了ListViewItem.add,然后使用subitem连续添加了更多项目。但现在情况有所不同。如何在WPF中添加listview中的项而不创建新类,因为数据列的数量是动态的。

修改

我上网几个小时但没有找到任何帮助。 无处不在,它是使用具有预定义列数的类完成的,而我想基于数据库添加列项,该数据库应具有不同的Ipnumber列。

3 个答案:

答案 0 :(得分:3)

您应该在代码中初始化对象集合,例如Employees

Imports System.ComponentModel
Imports System.Collections.ObjectModel

Public Class EmployeeInformation
  Public Property FirstName As String
  Public Property LastName As String
  Public Property EmployeeNumber As Integer
End Class

Class MainWindow
  Public Property Employees As ObservableCollection(Of EmployeeInformation)

  Public Sub New()
    ' This call is required by the designer.
    InitializeComponent()

    ' Add any initialization after the InitializeComponent() call.
    InitEmploeesCollection(10)
    DataContext = Me
  End Sub

  Private Sub InitEmploeesCollection(count As Integer)
    Employees = New ObservableCollection(Of EmployeeInformation)()

    For index = 1 To count
      Employees.Add(New EmployeeInformation() With {
                    .FirstName = "FirstName" & index,
                    .LastName = "LastName" & index,
                    .EmployeeNumber = index})
    Next
  End Sub
End Class

然后你可以简单地将它绑定到ListView

<ListView ItemsSource="{Binding Path=Employees}">
    <ListView.View>
        <GridView AllowsColumnReorder="True" ColumnHeaderToolTip="Employee Information">
            <GridViewColumn Header="First Name" Width="100" DisplayMemberBinding="{Binding Path=FirstName}"/>
            <GridViewColumn Header="Last Name" Width="100" DisplayMemberBinding="{Binding Path=LastName}"/>
            <GridViewColumn Header="Employee No." Width="100" DisplayMemberBinding="{Binding Path=EmployeeNumber}"/>
        </GridView>
    </ListView.View>
</ListView>

要动态初始化列,您可以添加问题中的代码。如果从数据库中获取数据,它并没有什么不同。只需填写Employees集合并将其绑定到ListView

Imports System.ComponentModel
Imports System.Collections.ObjectModel

Class MainWindow

  Public Property Employees As ObservableCollection(Of EmployeeInformation)

  Public Sub New()

    ' This call is required by the designer.
    InitializeComponent()

    ' Add any initialization after the InitializeComponent() call.
    InitEmploeesCollection(10)
    SetGridViewDynamically()
    DataContext = Me

  End Sub

  Private Sub InitEmploeesCollection(count As Integer)
    Employees = New ObservableCollection(Of EmployeeInformation)()

    For index = 1 To count
      Employees.Add(New EmployeeInformation() With {
                    .FirstName = "FirstName" & index,
                    .LastName = "LastName" & index,
                    .EmployeeNumber = index})
    Next
  End Sub

  Private Sub SetGridViewDynamically()
    Dim myGridView As New GridView
    myGridView.AllowsColumnReorder = True
    myGridView.ColumnHeaderToolTip = "Employee Information"

    Dim gvc1 As New GridViewColumn
    gvc1.DisplayMemberBinding = New Binding("FirstName")
    gvc1.Header = "FirstName"
    gvc1.Width = 100
    myGridView.Columns.Add(gvc1)

    Dim gvc2 As New GridViewColumn
    gvc2.DisplayMemberBinding = New Binding("LastName")
    gvc2.Header = "Last Name"
    gvc2.Width = 100
    myGridView.Columns.Add(gvc2)

    Dim gvc3 As New GridViewColumn()
    gvc3.DisplayMemberBinding = New Binding("EmployeeNumber")
    gvc3.Header = "Employee No."
    gvc3.Width = 100
    myGridView.Columns.Add(gvc3)

    ListView1.View = myGridView
  End Sub
End Class

Public Class EmployeeInformation
  Public Property FirstName As String
  Public Property LastName As String
  Public Property EmployeeNumber As Integer
End Class

这样XAML看起来就像这样。

<ListView Name="ListView1" ItemsSource="{Binding Path=Employees}"/>

答案 1 :(得分:1)

Dim row As String() = New String() {"John", "Doe", "1"}
myGridView.Rows.Add(row)

这是你要找的吗?

答案 2 :(得分:0)

程序的XAML部分必须是这样的:

            <ListView x:Name="lvPencere" HorizontalAlignment="Left" Height="156" Grid.Row="1" VerticalAlignment="Top" Width="309">
                <ListView.View>
                    <GridView>
                        <GridView.Columns>
                            <GridViewColumn Header="PencereSN" Width="0" DisplayMemberBinding="{Binding PencereSN}"/>
                            <GridViewColumn Header="Pencere Adı" Width="300" DisplayMemberBinding="{Binding PencereAD}"/>
                        </GridView.Columns>
                    </GridView>
                </ListView.View>
            </ListView>

您的VB部分必须是这样的:

Listview.Items.Add(New With {Key .PencereSN = "some string", Key .PencereAD = "some string"})