Silverlight 4之ComboBox用法

      今天花了点儿时间看了一下Silverlight里的一些控件,发现Silverlight中的ComboBox和C#.Net中的Dropdownlist很像,但是语法和属性却有着很大程度的区别,于是决定把这个困扰了我一个多小时的控件写一写。

      做过C#.Net的人们应该对DropDownList不陌生,或者说是很熟悉(本人就非常喜欢这个控件),它的AutoPostback属性解决了java里不能瞬时联动的问题(JavaWeb中项做瞬刷级联必须配合js来实现),并且在绑定数据源上也给了我们很多惊喜,但是今天看到Silverlight中的ComboBox感觉很失落,虽然它在Dropdownlist的基础上做了一些改进,但是用管了DropDownlist的程序员在初探ComboBox这个控件的时候会感觉很陌生,接下来就用代码说话吧...

MainPage.xaml  

 

MainPage.xaml

< Grid x:Name = " LayoutRoot "   Loaded = " LayoutRoot_Loaded " >
< ComboBox x:Name = " DropDownList1 "   Width = " 128 "   Height = " 24 " SelectionChanged = " DropDownList1_SelectionChanged " ></ ComboBox >
<!--   DropDownList1_SelectionChanged:数据发生改变时触发事件   -->
</ Grid >
 
**************************************************************************************************************************************************
 
MainPage.xaml.cs
 
MianPage.xaml.cs
private   void   LayoutRoot_Loaded( object   sender, RoutedEventArgs e)
{
Load_Drop();
DataDrop();
}
#region   加载ComboBox数据
///   <summary>
///   加载ComboBox数据
///   </summary>
public   void   Load_Drop()
{
List
< Model.Person >   list   =   new   List < Model.Person > ();   // 创建一个泛型List用于存储实体类对象
for   ( int   i   =   0 ; i   <   10 ; i ++ )   // 写一个循环用来增加数据
{
Model.Person ps
  =   new   Model.Person();   // Person实体类
ps.ID   =   i;
ps.Name
  =   " Terry "   +   i;
ps.Age
  =   " abc "   +   i;
list.Add(ps);
}
if   (list.Count   >   0 )
{
DropDownList1.ItemsSource
  =   list;   // 指定数据源
DropDownList1.DisplayMemberPath   =   " Name " ;   // 指定ComboBox显示的字段
}
else
{
DropDownList1.Items.Add(
" 没有您可选择数据 " );   // 如果没有数据,加载此项
}
DropDownList1.SelectedIndex
  =   3 ;   // 通过索引指定第4行数据为ComboBox首选项(索引值从0开始计数)
}
#endregion

#region   通过数据指定ComboBox首选项
///   <summary>
///   通过数据指定ComboBox首选项
///   </summary>
public   void   DataDrop()
{
for   ( int   i   =   0 ; i   <   DropDownList1.Items.Count; i ++ )   // 循环ComboBox中的数据
{
Model.Person p
  =   (Model.Person)DropDownList1.Items[i];   // 将第i行对象赋值给Person对象
if   (p.Name   ==   " Terry4 " )   // 判断是否为指定的数据
{
DropDownList1.SelectedIndex
  =   i;   // 如果为true,则选定该行为首选项
}
}
}
#endregion

private   void   DropDownList1_SelectionChanged( object   sender, SelectionChangedEventArgs e)
{
if   (DropDownList1.SelectedItem.ToString()   !=   " 没有您可选择数据 " )
{
Model.Person ps
  =   new   Model.Person();
ps
  =   (Model.Person)DropDownList1.SelectedItem;
}
}
其中Model是我新建的一个Silverlight Class Library工程,Person是我在Model工程下新建的一个实体类。
 
Person.cs
 
      
using   System;
using   System.Net;
using   System.Windows;
using   System.Windows.Controls;
using   System.Windows.Documents;
using   System.Windows.Ink;
using   System.Windows.Input;
using   System.Windows.Media;
using   System.Windows.Media.Animation;
using   System.Windows.Shapes;

namespace   Model
{
public   class   Person
{
public   int   ID
{
get ;
set ;
}
public   string   Name
{
get ;
set ;
}
public   string   Age
{
get ;
set ;
}
}
}

      Person类为什么在这里新建了一个Silverlight的类库,而不写在站点根目录下呢?这里说一下,因为之后的文章还会说一下Silverlight的数据中间层的处理,所以在这里先试试手,也算是对C#.Net的MVC框架进行一个小小的复习。而在这里Person类实际上就是一个实体类,用于存储及传递数据而准备的一个数据中间层的容器,我们可以看到在MainPage.xaml及MainPage.xaml.cs中,我们都用到了这个实体类,可见这个Person类的重要性,接下来我们就稍微解析一下它的作用。

      首先是在cs文件中ComboBox加载的时候,我们建立了一个List泛型列表,用于将以填好数据的每个实体类存到里面,这里为什么要用List泛型呢,说起来很郁闷,我们看这句代码DropDownList1.ItemsSource = list; //指定数据源 ItemsSource属性貌似继承了一个枚举类型的接口,这样就麻烦了,我们必须给它加载List(这个地方是否可以用ArrayList或者其他的列表容器,目前不详,我没有试其他的容器,不过List我用起来感觉很爽 吼吼~)所以我们不洗把实体类对象放到List中然后去绑定...

然后我们看"通过数据指定ComboBox首选项"这个方法,这个地方更搓火,记得在C#.Net中,DropDownList有个Find....Text/Value的方法,这个方法用于检索列表中满足我们所提出的条件的数据,而在ComboBox中这个方法被和谐了,这个事儿微软做的太tm蛋疼了,于是如果我们想要找到满足条件的数据,还要循环一下ConboBox列表,然后将我们所要的数据提取出来,在获取其索引来完成"通过数据指定ComboBox首选项"这个功能~太TM不爽了,不过也没办法,可能在这个地方还有其他的好办法,或者微软封装了这个方法我没找到(我问过几个高手,他们说也只能这样做,并且说我这么做非常有效率且比较简单  吼吼).

      最后我们看一下DropDownList1_SelectionChanged这个事件. 现在已经凌晨1点了,我也不想多说了,C#.Net有这个事件,并且代码跟上边的方法有类似的地方,很简单,稍微想一下就能明白了。

                                                                                                                                                                                      -转自    刘欢博客斋's sina博客

 

转载于:https://www.cnblogs.com/KnowledgeSky/archive/2012/06/21/2558079.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值