(也许我真的很蠢,问了这个非常愚蠢的问题,但我会真诚地感谢对一些示例代码的详细帮助。)
我对编程非常陌生,对WPF特别陌生。这是我的第一个WPF应用程序,因此我不了解MVVM。因此,请不要将这个问题与MVVM联系起来,因为这是另一个主题,我也在努力学习。我想解决这个没有MVVM的问题。
现有代码简介:
我有一个用户控件(people_tile),没有什么花哨,只是一堆标签,具有不同的字体大小、不同的外观等等,当我创建这个用户控件的一个对象时,我将其中一个标签的内容更改为数据库中的ID值。当用户控件加载时,剩下的事情会发生在它的内部。我敢肯定,程序员们会记得他们开始的日子,嘲笑我,但我仍然在学习。
现在,当要将这个用户控件带到屏幕上时,我有了一种堆栈式的方法。当用户单击主屏幕上的按钮时,页面上将打开另一个用户控件。这个用户控件(people_page)中有一个堆栈面板,其中装载了people_tile用户控件。我不太擅长绑定,所以我所做的就是运行一个for循环,将ID值传递给为people_tile用户控件创建的对象,然后将这个people_tile控件作为子控件添加到people_page用户控件上可用的堆栈面板中。
问题陈述
所有这些都非常好,没有任何问题或问题,只是当数据增加时,将people_tile用户控件添加到people_page用户控件的堆栈面板控件需要很长时间。目前,我在people表中有大约1200件物品。但问题开始早在500个项目本身。在面板中创建这些用户控件需要花费大量的时间。
帮助需要
我如何在这里使用虚拟化。我尝试过将VirtualizingStackpanels作为一种选择,通过阅读其他帖子,但我认为如果我们不使用绑定,它没有任何意义,因此,基本上,如果有任何人可以在以下方面帮助我
使用绑定加载我的用户控件的
真诚的要求:我对绑定不太熟悉或不精通,所以如果您提到绑定,那么也请告诉我需要在哪里修改代码。
ListBox approach尝试过的一些代码引用
在我创建的XAML中
<ListBox x:Name="ListBox_Main">
<ListBox.ItemTemplate>
<DataTemplate>
<local:UserControl_Tile_People/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>在后面的密码里我有这个
以列表(Of UserControl_Tile_People) =新列表(Of UserControl_Tile_People)()
For row_cntr = 0 To global_dt_people_master_list.Rows.Count - 1
Dim objTile As New UserControl_Tile_People
objTile.lblPerson_id.Content = global_dt_people_master_list.Rows(row_cntr).Item("bp_id").ToString
objTile.DataContext = objTile
items.Add(New UserControl_Tile_People() With {
.id_value_passed = global_dt_people_master_list.Rows(row_cntr).Item("bp_id").ToString
})
Next
Me.ListBox_Main.ItemsSource = items这并没有给我任何虚拟化。它也不加载用户控件。我的用户控件的代码如下
XAML部分
以及用于用户控制的代码
Private Sub UserControl_Tile_People_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
Me.lblPerson_id.Content = id_value_passed
lbl_person_id_changed()
End Sub
Public Sub lbl_person_id_changed()
Dim id_value As String = ""
If Me.lblPerson_id.Content <> "0" Then
id_value = Me.lblPerson_id.Content
prp_Person_Print_Name = id_value
prp_Mobile_Number = id_value
prp_LRP_Points = id_value
prp_LRP_cadre = id_value
prp_Person_Type = id_value
End If
End Sub
Dim pvt_Person_Print_Name As String
Public Property prp_Person_Print_Name As String
Get
Return pvt_Person_Print_Name
End Get
Set(value As String)
pvt_Person_Print_Name = value
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("Prp_Person_Print_Name"))
End Set
End Property我能够自己解决它,而不用任何MVVM。谢谢你的支持。
发布于 2021-06-20 10:55:29
我能够自己解决它,而不用任何MVVM。谢谢你的支持。
我刚弄明白克莱门斯想跟我说什么。
谢谢克莱门斯所有的指导。真的很感激。
https://stackoverflow.com/questions/68032789
复制相似问题