• 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博客

     

  • 相关阅读:
    Codeforces 101487E
    算法笔记--2-sat
    算法笔记--图的存储之链式前向星
    算法笔记--强连通分量分解
    Uva 11995 I Can Guess the Data Structure!
    算法笔记--米勒-罗宾素数测试
    HDU 5183 Negative and Positive (NP)
    算法笔记--快读(输入外挂)模板
    POJ 3258 River Hopscotch
    HDU 2289 Cup
  • 原文地址:https://www.cnblogs.com/KnowledgeSky/p/2558079.html
Copyright © 2020-2023  润新知