首页 > 代码库 > 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注意事项