我可以在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列。
答案 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"})