ListBox使用

一、什么是ListBox?

ListBox 是一个显示项集合的控件。一次可以显示 ListBox 中的多个项。

ListBox继承自ItemsControl,可以使用Items或者ItemsSource设置其内容。

二、在ListBox中显示数据

我们可以通过两种方式在ListBox中显示:直接内嵌ListBoxItem(或其他UIElement,如TextBlock等) 与数据绑定(90%情况下均为数据绑定实现)。

1.直接内嵌ListBox示例代码如下:

2.数据绑定的示例代码如下:

XAML代码 :

后置代码:

最终的现实效果都是一样的,如下图:

三、 如果获取ListBox的ItemTemplate/DataTemplate 中指定的控件

当我们使用数据绑定的控件,比如说ListBox,我们通常会自定义ListBox的模板(一般建议使用Blend工具修改模板),而在某些情况下,我们需要获取DataTemplate中的某一控件,以对其做一些特定的操作。那我们如何获取呢?事实上,我们可以使用VisualTreeHelper 类来获取指定的控件。下面是具体的Demo:

前台XAML代码:

后置代码代码:

四、ListBox 性能相关

在Silverlight中,为了将数据显示给用户,我们需要加载数据和绑定数据,但是哪个会导致性能问题呢?答案是:根据你的数据类型以及界面(UI)的复杂性而定。

通常,加载数据可以在UI线程或者后台线程中实现,数据存在的形式也不经相同,有的序列化为二进制数据,有的序列化为XML文件,有的则是图片形式存在等等。而数据绑定又有三种不同的绑定形式:一次绑定(One Time)、单向绑定(One Way)和双向绑定(Two Way)。

这里简单介绍下什么是VSP(VirtualizingStackPanel)

MSDN解释为:将内容排列和虚拟化在一行上,方向为水平或垂直。“虚拟化”是指一种技术,通过该技术,可根据屏幕上所显示的项来从大量数据项中生成user interface (UI) 元素的子集。仅当 StackPanel 中包含的项控件创建自己的项容器时,才会在该面板中发生虚拟化。 可以使用数据绑定来确保发生这一过程。 如果创建项容器并将其添加到项控件中,则与 StackPanel 相比,VirtualizingStackPanel 不能提供任何性能优势。

VirtualizingStackPanel 是 ListBox 元素的默认项宿主。 默认情况下,IsVirtualizing 属性设置为 true。当 IsVirtualizing 设置为 false 时,VirtualizingStackPanel 的行为与普通 StackPanel 一样。

我们可以将VSP理解为当需要时,VSP会生成容器对象,而当对象不在可视范围内时,VSP就把这些对象从内存中移除。当ListBox很想当大数据量的项目时,我们不需要将不在可视范围中的对象加载到内存中,从而解决了内存的问题。另外VSP有一个属性CacheMode设置缓存表示形式,默认设为Standard。当我们需要循环显示,可以将其设置为Recycling。

在ListBox中使用VSP来进行数据虚拟化时,我们需要注意以下几点:

1. 确保在DataTemplate 中的容器(如Grid)大小固定

2. 在数据对象可以提供相应值时,尽量避免使用复杂的转换器(Converter)

3. 不要在ListBox中内嵌ListBox

4. 强烈推荐不要在DataTemplate中使用用户控件

5. 在DataTemplate中不要使用自定义控件

时间: 2024-11-03 22:29:42

ListBox使用的相关文章

WPF ItemsControl ListBox ListView比较

在进行列表信息展示时,WPF中提供多种列表可供选择.这篇博客将对WPF ItemsControl, ListBox, ListView进行比较. 相同点: 1. 这三个控件都是列表型控件,可以进行列表绑定(ItemsSource): 2. 这三个控件均使用ItemsPresenter来展示列表信息: 不同点: 控件层次关系: ItemsControl: System.Object  System.Windows.Threading.DispatcherObject System.Windows.

Python3 Tkinter基础 Scrollbar Listbox 在listbox中创建一个垂直滚动条 yscrollcommand yview

镇场诗: 清心感悟智慧语,不着世间名与利.学水处下纳百川,舍尽贡高我慢意. 学有小成返哺根,愿铸一良心博客.诚心于此写经验,愿见文者得启发.------------------------------------------ code: from tkinter import * root=Tk() scrolly=Scrollbar(root) scrolly.pack(side=RIGHT,fill=Y) mylb=Listbox(root, yscrollcommand=scrolly.s

Python3 Tkinter基础 Listbox for循环与insert 将一个列表中元素添加到Listbox中

镇场诗: 清心感悟智慧语,不着世间名与利.学水处下纳百川,舍尽贡高我慢意. 学有小成返哺根,愿铸一良心博客.诚心于此写经验,愿见文者得启发.------------------------------------------ code: from tkinter import * root=Tk() myLB=Listbox(root) myLB.pack() myList=["贪狼","巨门","禄存","文曲","

WPF ListBox 中使用网格布局

<Grid> <ListBox Height="181" HorizontalAlignment="Left" Margin="12,12,0,0" Name="listBox1" VerticalAlignment="Top" Width="687" UseLayoutRounding="False" Panel.ZIndex="2&qu

WPF学习笔记——ListBox用ItemsSource绑定数据源

<Grid> <ListBox x:Name="Lst"> <ListBox.ItemTemplate> <DataTemplate> <Button MouseDoubleClick="Button_MouseDoubleClick"> <Grid> <Image Source="{Binding Path=BackGround}" /> <TextBlo

C# 向listbox添加大量数据项的实践心得

使用 ListBox.Items.Add 方法添加项时,可以使用 BeginUpdate 方法,以防止每次向列表添加项时控件都重新绘制 ListBox.完成向列表添加项的任务后,调用 EndUpdate 方法来使 ListBox 能够重新绘制.当向列表添加大量的项时,使用这种方法添加项可以防止绘制 ListBox 时闪烁. 参考内容

《ASP.NET》数据绑定—DropDownList、ListBox

DropDownList和ListBox实现两级联动功能,他们也可以将从后台数据库中搜选的出来的信息加以绑定,这里要实现的功能是在DropDownList中选择"省",然后让ListBox自动将其省份下的"市"显示出来,这就是所谓的两级联动功能,这个功能我们在很多注册网页上看见,今天咱们就用ASP.NET解开其神秘的面纱. 一.设置前台界面,在Web窗体中添加DropDownList和ListBox两个控件.界面图如下所示. 二.编写后台代码 在这,后台代码编写在其

Web页面中两个listbox的option的转移

Html: <div><span>所选时间:</span><select id="xuanyongTimelb" style="width: 200px; height: 130px;" multiple="multiple"></select></div> <div class="label"><span id="rightt

wpf CollectionViewSource与ListBox的折叠、分组显示,及输入关键字 Filter的筛选

在wpf中虽然ObservableCollection<T>作为ListBox的Itemsource,很好,很强大!但是CollectionViewSource与ListBox才是天作之合! wpf中ListBox支持分组显示,CollectionViewSource.GroupDescriptions为其实现了分组.废话不多说,下面上ListBox分组显示的Demo代码: XAML: <Window x:Class="WpfListGroup.MainWindow"

标准控件(五)——Label,ListBox

Label 父类:WebControl 在呈现的时候,两边会呈现为span标签. 属性: Width                   (Unit)可设为像素,也可设为百分比 Height                  (Unit)可设为像素,也可设为百分比 BackColor               Color ForeColor               Color BorderColor             Color BorderWidth             Uni