首页 > 代码库 > ComboBox注意事项
ComboBox注意事项
今天写代码的时候遇到这样一个问题,Silverlight项目在IIS上发布后,通过本机IP访问ComboBox的列表内容不显示。而通过VS运行,localhost,127访问均没有问题。检查了IIS配置没有问题(我的列表是读取的服务器上XML里的数据),文件客户端请求到了,查看了DisplayMemberPath属性,设置的Name属性也没有问题。百思不得其解之后又仔细跟踪了一下代码。陡然发现原来问题出在自定义类上。先上一段代码,大家分析一下
comboBox.DisplayMemberPath = "Name";comboBox.Items.Add(new { Name = "hello", Value = "http://www.mamicode.com/nice to meet you"});
这段代码运行之后会怎么样呢,答案是ComboBox列表里并没有你想要的内容,也就是hello选项,这是怎么回事呢。仔细的话你会发现原来列表里边并非没有选项,而只是内容内有显示。效果是这样的
其实Items里边已经添加了这个匿名类对象,也能访问到其属性值。但内容为什么不显示呢,原来如果Items添加的是自定义对象,这个类必须是public类型。这就是问题所在了。
我代码里边是自定义的一个类,因为没有用public声明,默认为私有了。但奇怪的是只有在用IP访问后才暴露这个问题,却是不知道什么原因。
这里再补充几点ComboBox知识点:
1、DisplayMemberPath,获取或设置为每个数据项显示的属性的名称或路径,比如上边的Name
2、SelectedValuePath,获取或设置选中数据项的属性名称或值
3、SelectedItem,获取或设置选中的数据项对象,即上边的匿名对象
4、SelectedValue,获取或这是选中项的值,这个值即SelectedValuePath指定属性的值
5、数据项显示多个字段内容的方法,可以采用这种方式
1 <ComboBox ...> 2 <ComboBox.ItemTemplate> 3 <DataTemplate> 4 <StackPanel Orientation="Horizontal"> 5 <TextBlock Text="{Binding Name}"/> 6 <TextBlock Text="{Binding Value}"/> 7 </StackPanel> 8 </DataTemplate> 9 </ComboBox.ItemTemplate>10 </ComboBox>
ComboBox注意事项