`
WPComming
  • 浏览: 58920 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Windows Phone开发(17):URI映射

 
阅读更多

前面在讲述导航的知识,也讲了控件,也讲了资源,样式,模板,相信大家对UI部分的内容应该有了很直观的认识了。那么今天讲什么呢?不知道大家在练习导航的时候是否发现一个问题?

当我们向页面传递一个参数的时候,是没问题的,但是,如果我们在XAML中使用这样的URI时,你敢保证它还能正常运行呢?

/PageaTest.xaml?name=小强&age=100

你发现,嘿,咋回事了?怎么报错了?不知道有没有去思考,为什么呢?

好,先问你一句,你学过Web开发吗?或者说,了解HTML吗?如果你了解,好,你已经找到答案了。

哈哈,对了,就是编码和转义的问题,“&”符号用在XAML中同样需要转义,但你一定发现了,如果把它换成转义符,一来好像很难看,二来,也不太安全。大家知道,MVC中是使用什么来访问页面的?是的,能过控制器的行为,而且是经过URI映射的。

同理,在Silverlight的导航中,也同样需要的,在WP中依然适用。

先说一下不使用URI映射的情况下如何解决该问题。

对的,就是改用C#代码来导航,这样就可以避开了XAML转义了。


看看效果吧,怎么样,解决了吗?

别高兴着,主角还出场呢,今天我们讲的URI映射,所以下面我们要用URI映射的方式来完美解决这问题。

用URI映射难吗?不难,很简单,我们用到两个类:

1、UriMapper ,它用来管理映射的集合,它是头目分子来的,很重要的哦,它下面可以有成千上万的虾兵蟹将。

2、UriMapping,这些家伙是跟着UriMapper老大混饭吃的。

也就是说,一个UriMapper里面可以包含1到N个UriMapping不等,一位老大可以带领若干个马仔,“兄弟上阵一群狼”就是这个道理。

可能由于各种原因,你的超级应用程序会有N多种映射方案,所以说允许N个UriMapping,你知道一支乐队不可能个个都拉小提琴的,显然需要其它乐器的配合。

好的,那么,URI是如何映射的?相信玩过C#的朋友,一定会熟悉这种语句:

string ss = string.Format("你的人品值是:{0}", -100);

上面的{0}是占位符,01234依次往下推,上面原理相信大家都懂,首先在“你的人品值是:{0}”中找到“{0}”,然后用-100为替换{0},所以上面的字符串变为:你的人品值是:-100.

URI映射的原理是一样的,比如:

/Student/{id} ----> /studentdetail.xaml?sid={id}

大家猜到上面的URI是怎么映射的吗?

看左边,其它是多余,是“伪”兵,用来迷惑敌人的,真正的数据是{id},而箭头右边就是真正的URI地址,它也有一个{id},对,它在左的伪URI中找到{id},然后用它的值来替换右边的{id}。

理解吗?例如我传一个URI,/Student/201201030,而最终映射后的真实地是/studentdetail.xaml?sid=201201030,哈,现在明白吗?

不明白?我再举几个,你自己研究一下看看找到规律没有?

/cat/{cid} ---> /categ.xaml?id={cid}

/cat/5025 ---> /categ.xaml?id=5025

/{id}/{name} ----> /goodslist.xaml?gid={id}&gname={name}

/302/天地七号 -----> /goodslist.xaml?gid=302&gname=天地七号

/{sex}/{order}/{type} ----> /listmat.xaml?sex={sex}&acord={order}&swType={type}

/女/3/7 ------> /listmat.xaml?sex=女&acord=3&swType=7

至于为什么要用“/”,呵呵,因为这个不用转义嘛 ,二为,为了让运行库可以识别占位符的位置,也可作为分隔符,一举两得。

怎么样,有感觉了没?还没?不要紧,一起动手玩一玩就有感觉了。

第一步,打开App.xaml.cs文件,在App的构造函数中添加URI映射。


然后,回到首页,加入以代码导航代码。


分享到:
评论

相关推荐

    安卓开发通讯录

    在安卓平台上进行应用程序开发时,通讯录功能是一个非常常见的需求,它允许用户管理他们的联系人信息,包括姓名、电话号码、电子邮件地址等。本篇将深入探讨如何在Android环境中实现一个基本的通讯录应用,主要关注...

    手机通讯录

    这涉及到Adapter的使用,例如`SimpleCursorAdapter`,它能够将Cursor中的数据映射到视图元素上。 在“手机通讯录”Demo中,还可能包含了一些权限处理。由于访问通讯录数据涉及用户的隐私,所以在Android 6.0(API...

    调用手机通讯录的demo

    在UI展示上,通常会将查询到的联系人数据绑定到ListView,这需要用到适配器(Adapter)如`SimpleCursorAdapter`,将Cursor中的数据映射到ListView的各个项。 12. **运行时权限**: 自Android 6.0(API级别23)起...

    自写android联系人

    此外,还需要定义URI映射,通过UriMatcher来识别不同的操作请求。内容提供者使得应用能够遵循统一的接口进行数据操作,使得数据管理规范化。 **SQLite数据库** SQLite是Android内置的关系型数据库系统,用于存储...

    新版Android开发教程.rar

    � 源代码完全开放,便于开发人员更清楚的把握实现细节,便于提高开发人员的技术水平,有利于开发 出 更具差异性的应用。 � 采用了对有限内存、电池和 CPU 优化过的虚拟机 Dalvik , Android 的运行速度比想象的要...

    MTK6589_Contacts源码(Android4.22)

    ContentProvider实现了标准的URI映射,使得其他应用可以通过content:// URI访问联系人数据。 3. **UI界面**:应用界面主要由Activity和Fragment组成,负责展示联系人列表、联系人详情以及添加、编辑联系人的功能。...

    简单的利用simplecursoradapter获取联系人信息

    在Android开发中,获取设备上的联系人信息是一项常见的任务,特别是在构建社交或通讯类...在实际开发中,可能还会根据需求对数据进行筛选、排序,或者添加更多复杂的视图映射,但以上步骤提供了一个基础的实现框架。

    通讯录右边按照字母排序的索引查询

    - 使用ContentResolver的query()方法,传入ContactsContract.CommonDataKinds.Phone.CONTENT_URI作为数据源,设置适当的查询条件和选择列,如名字(DISPLAY_NAME)。 - 通过Cursor遍历查询结果,获取每个联系人的...

    Android通讯录demo

    在Android平台上,构建一个通讯录应用是常见的任务,它涉及到许多关键知识点,这些知识点对于深入理解和开发Android应用程序至关重要。以下是对“Android通讯录demo”及其相关源代码的详细解析: 1. **Android权限...

    Android中可增删联系人列表的简单实现

    Cursor cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null); List<Contact> contacts = new ArrayList(); while (cursor.moveToNext()) { ...

    android项目通话记录源代码

    intent.setData(Uri.parse("tel:" + phoneNumber)); startActivity(intent); ``` 对于发送短信,使用`ACTION_SENDTO`: ```java Intent intent = new Intent(Intent.ACTION_SENDTO); intent.setData(Uri....

    Android 连接服务器读取联系人

    例如,你可以使用`query()`方法,指定`ContactsContract.CommonDataKinds.Phone.CONTENT_URI`作为数据源,查询联系人的电话号码,同时可以添加`WHERE`子句过滤特定的联系人信息。 最后,**存储和显示头像**是一个...

Global site tag (gtag.js) - Google Analytics