如何绑定ComboBox的Items?如何从绑定的ComboBox中获取ComboBoxItem?
原文出处:http://www.beacosta.com/Archive/2005_09_01_bcosta_archive.html
绑定ComboBox的Items和绑定ListBox的Items是很象的:
<Window.Resources>
<local:GreekGods x:Key="greekGods"/>
<DataTemplate x:Key="itemTemplate">
<TextBlock Text="{Binding Path=Name}" />
</DataTemplate>
</Window.Resources>
<ComboBox ItemsSource="{StaticResource greekGods}" ItemTemplate="{StaticResource itemTemplate}" Width="200" Name="comboBox"/>
相似的原因是因为ComboBox和ListBox都是从ItemsControl继承来的,且ItemsSource和ItemTemplate都是ItemsControl的属性.
如果你读过前面关于如果从绑定数据的ListBox中获取一个ListBoxItem的帖子,你或许会认为没有必要继续阅读如何为ComboBox做同样的事.但是那里还是有一些小窍门你必须知道的.
如果你使用与前面帖子相似的代码去解决问题,那就会发现ComboBoxItems是null:
GreekGod greekGod = (GreekGod)(comboBox.Items[0]);
ComboBoxItem cbi1 = (ComboBoxItem)(comboBox.ItemContainerGenerator.ContainerFromIndex(0));
ComboBoxItem cbi2 = (ComboBoxItem)(comboBox.ItemContainerGenerator.ContainerFromItem(comboBox.Items.CurrentItem));
这是因为ComboBox只会在你打开它时才会有产生的items.所以这个窍门就是当你调用ContainerFromIndex或ContainerFromItem前打开ComboBox:
GreekGod greekGod = (GreekGod)(comboBox.Items[0]);
comboBox.IsDropDownOpen = true;
ComboBoxItem cbi1 = (ComboBoxItem)(comboBox.ItemContainerGenerator.ContainerFromIndex(0));
ComboBoxItem cbi2 = (ComboBoxItem)(comboBox.ItemContainerGenerator.ContainerFromItem(comboBox.Items.CurrentItem));
comboBox.IsDropDownOpen = false;
由于原来作者的代码比较早期,vs更新后无法编译了.自己小小修改以下:
share your files at box.net
没有评论:
发表评论