使用VB.Net在WPF中以编程方式添加listview项后更新它们
我是vb.net开发人员,是WPF的新手 我正在将Windows窗体应用程序转换为WPF,在添加listview项时更新它们时遇到问题。我在应用程序中有一个通信过程,它连接到服务器,使用tcp连接向服务器发送或从服务器下载信息。此过程更新listview以显示与服务器的通信状态。但是当我添加这些项目时,它们不会显示出来,而是在流程完成时,它们都是可见的。我希望在添加项目时刷新这些项目。在Windows窗体中,我使用了以下代码:使用VB.Net在WPF中以编程方式添加listview项后更新它们,wpf,vb.net,listview,listviewitem,Wpf,Vb.net,Listview,Listviewitem,我是vb.net开发人员,是WPF的新手 我正在将Windows窗体应用程序转换为WPF,在添加listview项时更新它们时遇到问题。我在应用程序中有一个通信过程,它连接到服务器,使用tcp连接向服务器发送或从服务器下载信息。此过程更新listview以显示与服务器的通信状态。但是当我添加这些项目时,它们不会显示出来,而是在流程完成时,它们都是可见的。我希望在添加项目时刷新这些项目。在Windows窗体中,我使用了以下代码: ListView1.EnsureVisible(ListView1
ListView1.EnsureVisible(ListView1.Items.Count - 1)
witch将确保最后一项在listview中可见。但是,该代码在WPF中不起作用。我正在寻找一个替代方案来实现这一点。任何建议都是受欢迎的,即使它使用另一个元素而不是listview。或者,如果有人知道使用C#的替代方案,也欢迎使用
更新我的listview的VB代码如下:
Private Sub DebugMsg(ByVal Message As String, Optional ByVal NewLine As Boolean = True)
If NewLine = True Then
Dim item As New ListViewItem
item.Content = Message
Me.ListView1.Items.Add(item)
item = Nothing
ElseIf NewLine = False Then
If ListView1.Items.Count > 0 Then
ListView1.Items(ListView1.Items.Count - 1).Content = Message
Else
Dim item As New ListViewItem
item.Content = Message
Me.ListView1.Items.Add(item)
item = Nothing
End If
End If
Me.ListView1.Items.Refresh()
End Sub
<ListView x:Name="ListView1" Margin="10,101,10,10" Background="#FF0C0C0C" Foreground="Cyan" FontSize="20" ItemsSource="{Binding}" >
<ListView.View>
<GridView>
<GridView.ColumnHeaderContextMenu>
<ContextMenu/>
</GridView.ColumnHeaderContextMenu>
<GridViewColumn Header="Status" Width="475"/>
</GridView>
</ListView.View>
每当我想更新listview以显示通信状态时,都会使用此子项
我的XAML代码如下所示:
Private Sub DebugMsg(ByVal Message As String, Optional ByVal NewLine As Boolean = True)
If NewLine = True Then
Dim item As New ListViewItem
item.Content = Message
Me.ListView1.Items.Add(item)
item = Nothing
ElseIf NewLine = False Then
If ListView1.Items.Count > 0 Then
ListView1.Items(ListView1.Items.Count - 1).Content = Message
Else
Dim item As New ListViewItem
item.Content = Message
Me.ListView1.Items.Add(item)
item = Nothing
End If
End If
Me.ListView1.Items.Refresh()
End Sub
<ListView x:Name="ListView1" Margin="10,101,10,10" Background="#FF0C0C0C" Foreground="Cyan" FontSize="20" ItemsSource="{Binding}" >
<ListView.View>
<GridView>
<GridView.ColumnHeaderContextMenu>
<ContextMenu/>
</GridView.ColumnHeaderContextMenu>
<GridViewColumn Header="Status" Width="475"/>
</GridView>
</ListView.View>
提前感谢