c# – 使用ItemsSource和ItemTemplate的WPF ListBox
当我在
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文档在这里: 问题是关于数据上下文的范围.当您绑定ListBox上的任何属性时,它将使用ListBox的数据上下文 – 因此将数据上下文传递给转换器的原因.如果在ItemTemplate中设置数据模板,它会将该模板应用于列表中的每个项目.我想根据您提供的简单代码,您需要在数据模板中包含转换器: <ListBox ItemsSource="{Binding ListOfIndexes}"> <ListBox.ItemTemplate> <DataTemplate> <ContentControl Content="{Binding Converter={StaticResource IndexToObjectDescriptionConverter}}"/> </DataTemplate> </ListBox.ItemTemplate> </ListBox> 在这种情况下,将为每个项目呈现ContentControl,并将该项目作为其数据上下文. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |