加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 使用ItemsSource和ItemTemplate的WPF ListBox

发布时间:2020-12-16 02:02:17 所属栏目:百科 来源:网络整理
导读:当我在 WPF ListBox中同时拥有ItemsSource和ItemTemplate时,我对如何解析绑定感到困惑. 我有一个ObservableCollection int名为ListOfIndexes.对于每个索引,我想在数据库表中查找其记录.我希望在IndexToObjectDescriptionConverter中这样做. ListBox ItemsSou
当我在 WPF ListBox中同时拥有ItemsSource和ItemTemplate时,我对如何解析绑定感到困惑.

我有一个ObservableCollection< int>名为ListOfIndexes.对于每个索引,我想在数据库表中查找其记录.我希望在IndexToObjectDescriptionConverter中这样做.

<ListBox ItemsSource="{Binding ListOfIndexes}" 
         ItemTemplate="{Binding Converter={StaticResource IndexToObjectDescriptionConverter}}" />

但转换器中的断点告诉我,ItemTemplate绑定读取的值是窗口本身 – 即ItemsSource和ItemsTemplate的DataContext是相同的.

请原谅一点坦率,但这似乎是DUMB. ItemTemplate的整个点是渲染ItemsSource中的每个元素,所以我想我认为ItemTemplate的DataContext将是被渲染的单个元素.

那就是说,我怎么告诉ItemTemplate它应该担心ItemsSource表示的各个元素而不是使用整个窗口的DataContext?

解决方法

您需要为ItemTemplate使用数据模板.然后将其应用于列表中的每个项目

MSDN文档在这里:
http://msdn.microsoft.com/en-us/library/system.windows.controls.itemscontrol.itemtemplate(v=vs.110).aspx

问题是关于数据上下文的范围.当您绑定ListBox上的任何属性时,它将使用ListBox的数据上下文 – 因此将数据上下文传递给转换器的原因.如果在ItemTemplate中设置数据模板,它会将该模板应用于列表中的每个项目.我想根据您提供的简单代码,您需要在数据模板中包含转换器:

<ListBox ItemsSource="{Binding ListOfIndexes}">
  <ListBox.ItemTemplate>
    <DataTemplate>
      <ContentControl Content="{Binding Converter={StaticResource IndexToObjectDescriptionConverter}}"/>
    </DataTemplate>
  </ListBox.ItemTemplate>
</ListBox>

在这种情况下,将为每个项目呈现ContentControl,并将该项目作为其数据上下文.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读