打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
石头堆砌的小路: 如何从数据绑定的ListBox中获取ListBoxItem?

如何从数据绑定的ListBox中获取ListBoxItem?

如何从数据绑定的ListBox中获取ListBoxItem?

原文出处:http://www.beacosta.com/Archive/2005_09_01_bcosta_archive.html

在WPF中数据绑定一个ListBox到一个列举物品并不是那么容易.

<Window.Resources>
    <local:GreekGods x:Key="greekGods"/>

    <DataTemplate x:Key="itemTemplate">
        <TextBlock Text="{Binding Path=Name}" />
    </DataTemplate>
</Window.Resources>

<ListBox ItemsSource="{StaticResource greekGods}" ItemTemplate="{StaticResource itemTemplate}" Name="listBox"/>

ListBox的ItemSource属性有一个IEnumerable,就是你想要显示的物体列表.在这里GreekGods数据源是ObservableCollection(继承自IEnumerable)类型.ItemTemplate属性指定DataTemplate,DataTemplate是用来控制如何显示数据的.在这个例子中,每一项都有一个TextBlock来显示GreekGod的名字.

一些人可能会很惊讶,因为运行代码中的ListBox.Items[i]会返回我们所绑定的数据而不是TextBlock或者ListBoxItem.我觉得,能够 很容易的从ListBox中获取到特定位置的数据是很酷的,因为这是我们通常想要的.

GreekGod greekGod = (GreekGod)(listBox.Items[0]);

但是当你确实想获取产生的ListBoxItem时该如何做呢?这个有一些小窍门去发掘,但是利用下面的代码也很容易做到:

ListBoxItem lbi1 = (ListBoxItem)(listBox.ItemContainerGenerator.ContainerFromIndex(0));

另外ListBox.ItemContainerGenerator.ContainerFromItem(object item)通过指定item也能返回ListBoxItem.这个方法很经常使用到,例如,从CurrentItem获取ListBoxItem:

ListBoxItem lbi2 = (ListBoxItem)(listBox.ItemContainerGenerator.ContainerFromIndex(listBox.Items.CurrentItem));

我将会在以后的帖子中详细的介绍selection和current item.但在这个例子中,这个还是很有必要知道的,为了保持selection和current item的同步性,我设置了ListBox的IsSynchronizedWithCurrentItem="true".



由于原来作者的代码比较早期,vs更新后无法编译了.自己小小修改以下:

share your files at box.net
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Windows Presentation Foundation(WPF)中的数据绑定(使用XmlDataProvider作控件绑定)
用 ListBox 和 DataBinding 显示列表数据
WPF中绑定XML数据源
WPF中如何使用代码操作数据模板生成的控件
silverlight教程(5)——使用列表,并和数据绑定,以显示列表数据
WPF三大模板简介
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服