• windows phone中的数据绑定


    前几天写了一个绑定数据的小demo

    具体实现的内容是:

    1、在系统正式启动时实例化5个数据对象
    2、实现在页面上逐个操作显示数据  

    具体步骤如下:

    1、新建一个项目,添加一个公共类person,其中含有人的属性(一依据个人要求写啦,像姓名、电话什么的)
    2、在主页面的代码实现页面中实例化person类并初始化(直接new person,实例化了5个对象)
    3、实现上一张,下一张的代码(我用的是if…else…实现的,但要指出,if…else…有点浪费的感觉,可以使用switch实现一样的代码)
    4、在主页面中布局,使用画布控件,在画布控件中添加一个Image和几个TextBlock 
    5、添加实现翻页的按钮
    6、绑定画布控件的数据(用的是this.canvas1.DataContext = 实例化的类名)

    遇到的问题:

    在页面上逐个操作显示数据,开始我想的是将当前画布的类具体化为一个string,将5个实例化的类名都存储到一个string数组中,

    问题出现了1、将当前画布的类具体化为一个string,当前画布的类名是string不代表这就是一个string,用this.canvas1.DataContext读到的只是一个object类型的东西,我又实例化一个person类,将从canvas中读到的object赋值给新实例化的person然后读取名字,但是这个时候读到的仅仅是strinrg类型,虽然用的是if判断,且满足读取到的string与string数组中的string相等,用this.canvas1.DataContext=next时只是让canvas等于一个string而不是一个类,所以会出错

    分析好就解决问题,既然用this.canvas1.DataContext读取到的只是object类型,为什么我不直接声明为object类型的数组呢?果然声明为object类型的数组就好用多了,直接将object类型的元素赋值给this.canvas1.DataContext就OK,

    具体代码:

    实现点击下一页时的代码

    View Code
     1  object[] per = new object[5] { yiyi, hihi, lili, hehe, wang };
     2             object dangqian = this.canvas1.DataContext;
     3             object next;
     4             for (int i = 0; i < per.Length; i++)
     5             {
     6                 if (per[i] == dangqian)
     7                 {
     8                     if (i == 4)
     9                     {
    10                         this.canvas1.DataContext = yiyi;
    11                     }
    12                     else
    13                     {
    14                         next = per[i + 1];
    15                         this.canvas1.DataContext = next;
    16                     }
    17                 }
    18             }

    第二种种方法:

    先实例化canvas,将其内容读取,然后用switch进行划分和重新赋值,用switch比for效率高

    其中下一张的代码:

    View Code
     1  Person dangqian=new Person ();
     2             dangqian = (Person)this.canvas1.DataContext;
     3             string a=dangqian.Name;
     4            
     5             switch(a)
     6             {
     7                 case "yiyi":
     8                     this.canvas1.DataContext=hihi;
     9                     break;
    10                 case"hihi":
    11                     this.canvas1.DataContext = lili;
    12                     break;
    13                 case "lili":
    14                     this.canvas1.DataContext = hehe;
    15                     break;
    16                 case "hehe":
    17                     this.canvas1.DataContext = wang;
    18                     break;
    19                 case "wang":
    20                     this.canvas1.DataContext = yiyi;
    21                     break;
    22             }

     第三种方法:

    第三种方法,在方法外部声明一个实例化的当前类now然后依然用switch分支语句

    View Code
     1  switch (now.ID)
     2             {
     3                 case 1:
     4                     this.canvas1.DataContext = person3;
     5                     now.ID = now.ID + 2;
     6                     break;
     7                 case 2:
     8                     this.canvas1.DataContext = person1;
     9                     now.ID = now.ID -1;
    10                     break;
    11                 case 3:
    12                     this.canvas1.DataContext = person2;
    13                     now.ID = now.ID - 1;
    14                     break;
    15             }

    觉得不太理解的同学可以下载我的源码:http://download.csdn.net/detail/qinpei11/4806595

  • 相关阅读:
    分享一些曾经设计的ASP.NET自定义服务端控件(附源程序下载)
    使用SuperSocket实现TLV自定义协议网络通信的Demo
    让Silverlight支持GB2312中文编码
    在Sqlite中通过Replace来实现插入和更新
    在VS2010项目中引用Lib静态库(以Openssl为例)
    金融系统中PBOC/EMV的TLV的算法实现(含C++/C#)
    在Windows下C++实现UNIX中的GZ格式的解压缩(附工具)
    Opensuse网络配置备忘
    项目管理理论与实践系列文章索引
    让Windows远程访问Opensuse桌面的解决办法
  • 原文地址:https://www.cnblogs.com/netqin/p/2777481.html
Copyright © 2020-2023  润新知