摘要: 开篇 最近在做一个Silverlight的框架。 噢,这是一个仅仅工作一年半的没学历的我做的!! 现在还在开发中..... 因最近领导要看。我想先写一篇简单的文章来介绍我的这种TagSL编程。 事先声明,这种编程与传统的编程模式格格不入。不用ORM,不写实体类,设计模式貌似没有,甚至会要在XAML里写Sql语句哦,并且强制要求没特殊情况不能动服务端的代码啊!并且没用WCF等高深技术啊!甚至于你会发现怎么我还提倡XAML文件用中文命名!............. 如果你是自认为‘大牛’的并且喜欢乱喷的人,请绕道,寒舍承受不了您大驾光临。当然,如果你有一定的编程经验,并愿意以平...阅读全文
posted @ 2011-12-11 22:10 银光小子 阅读(1681) 评论(17) 编辑
摘要: SIlverlight牛逼的程序员,在我看来是SIlverlight博客最好(IN CHINA)的程兴亮大哥来访 各位可去31楼膜拜。在此我郑重申明:1:本项目属于半成品功能均未实现。中途个人决定转成开源的学习项目。性质变为非商用的学习项目。2:本项目使用了某网友做的项目的样式文件(表格样式文件),还有一些图片文件。并在界面上模仿了该网友的一些功能。比如表格的内容等。但这些内容中的功能并未实现,都是放在那好看的。但我还是向该网友致歉。3:必须声明的是,本项目核心功能,即实时定位的功能.... 除了一些表格的样式,其中放着好看的字段以外。其余界面布局等均为本人所编写。之前本人说代码均为自己写的.阅读全文
posted @ 2011-12-05 00:18 银光小子 阅读(8390) 评论(101) 编辑
摘要: 本来这篇文章已经下了头条 下了精华区 ... 影响力已经不在 可是不知道哪来的一股力量 莫名奇妙地一堆人来攻击我质疑我 他们所持的核心观点就是 既然我是清华IT的 那为什么就要 来这说清华IT的坏话呢??? 我一遍一遍的根他们解释 一来这是改革之必要 二来这种坏话本身不是针对我们这个机构而是针对所有机构 三来 我说了什么很实质性的坏话了,都是实话啊??? 某个名为“蝶恋花”的网友有篇评论尤为...阅读全文
posted @ 2011-03-07 00:35 银光小子 阅读(11829) 评论(344) 编辑

 

给Xaml需要的C#

 上文讲到了一种比较好玩而独特的Silverlight的开发模式-----即改即现。如上文所讲的那样,这种模式本身是比较爽的,你当即改的XAML,当即改的UI,可以不经过编译阶段,直接在界面上显示。但问题就是,我们实际的业务过程中,一定会有相应的C#代码来对应这份XAML。而本文怎是阐述我的实现方式。

 

又得说说传统的Silverlight开发了

    在传统的开发中,哪怕我们对Silverlight程序进行任何小的改动,我们都要经历以下的阶段。

1:重新生成DLL文件。

2:将所有的DLL文件打包,形成XAP。

    简答的来说,如果本身这个XAP包由20个DLL文件组成(这种属于比较正常的,通常随便引用一些第三方的DLL 就凑齐20个了)。我第一次编译,生成了一个XAP包。后来修改程序了,其中一个DLL文件发生了极小的变化,但这个时候会生成一个新的XAP包。而且请注意,前后这两个XAP包除了那个修改的DLL,其余完全相同。这多不爽啊。为了一个修改的DLL,别的DLL要重新压缩一次....

     而在我看来,比较好的做法就是,把这个自己写的业务的DLL,放在服务端。当我的这个业务DLL修改了编译了,不需要重新打包到XAP里,一来编译不打包会比之前快得多。加上因为上文已经说到,这个DLL本身没有包含XAML文件,所以不会很大。我之前做过一个项目,15个页面,代码编译后的DLL文件才50KB不到。非常的小.....。

 

上代码

 http://files.cnblogs.com/MySilverlight/demo3.zip

代码说明

  首先照上文所说的那样,找到 ....  \SilverlightApplication2\SilverlightApplication2.web\ClientBin\MyXaml\XamlShow\XamlShow.sln   并切记用Blend打开。

  然后用VS打开SilverlightApplication2.sln。并直接按F5键,点击按钮,会弹出如下界面。

 

点击按钮A.....。

 

 

呵呵,在这里有几点你必须非常注意。

1:按钮A的点击事件是放在

 

 

2:请注意,这Silverlight类库项目是放在

这的,放在服务端。当你的Test修改编译后,刷新界面上即可看到更改的部分。

 

 

至于代码实现,估计又得大跌眼镜,前后估计才10行代码吧。

就是一反射而已呵呵。

后话

 当然这只是粗略的讲解了一种思路而已:将业务代码放在单独的类库中,不混进XAP包。当然,就上面这些代码本质上并没完整解决‘代码后置’的问题。比如现在我要定义一个Converter,我该放哪呢??  XAML上又该怎么引用呢?........  还是那句话 下下下回 分解

 

 前面的文章讲到,这期间写的文章其实是一个系列。而前两篇加上这篇,实际上已经把我的框架的主干讲了。

 任何一个业务系统,都是由许多页面组成(请注意我说的是企业级开发,互联网开发我没接触).... 。而我们开发的过程其实就是开发一个个页面的过程。

  而在我的开发模式中,一个页面的加载有三个步骤

 1:从服务端下载XAML文件并形成界面(http://www.cnblogs.com/MySilverlight/archive/2012/05/26/2518798.html

 2:  绑定数据(http://www.cnblogs.com/MySilverlight/archive/2012/05/24/2516970.html)。

 3:‘代码后置’(本文)。

 这三个步骤我分别写成了三个方法。InnitUI,InnitData,InnitCodeBehind。

  呵呵 睡觉去咯。

  下一篇讲我的 Async初体验。在我开发Silverlight的过程中,大量的异步编程让我痛苦。直到响应高手laozhao的号召使用Async  Await关键才算得到解脱。 Async的使用,也让我的框架使用起来稳定性和易用性爽得不少.......     嘿嘿。

posted @ 2012-05-26 16:11 银光小子 阅读(716) 评论(1) 编辑
摘要: 在我们实际的开发中,我们的XAML哪怕只做了一个非常小的更改,我们想看看效果,都必须经过编译阶段。XAML必须重新打包近XAP。随着项目越来越大,编译和打包的时间也会越来越长。当项目比较大的时候,我们哪怕做一个非常小的功能的更改,都必须要整个重新生成一个新的XAP包。 而即改即现的意思,就是改了之后,不要编译,马上就能看到效果。 比如上面的小例子,几行代码实现了一个简单版本的”即改即现“。你把XAML做任意的符合条件的改动,点击一下按钮,效果即可出来。 当然上面那个东西不能实际做项目用,实际的项目开发当中,我们的Xaml当然不能在那个小小的文本框里编辑,最好用Blend编辑。(在这插句题外话.... 有朋友觉得学习Silverlight可以不用Blend,这绝对错误的观念。) 所以,如果能用Blend编辑XAML,并且能点个按钮,0.5秒内看到改的效果,我想那一定是件爽事。阅读全文
posted @ 2012-05-26 01:57 银光小子 阅读(972) 评论(4) 编辑

开篇

      在任何的BS项目的开发中,怎么把后台的数据展示到前端,都是无法避免的甚至有时候让人头疼的问题。考虑到这点,Silverlight中微软给予了我们Binding这一伟大的特性。借助他,让我们可以用非常优雅的方式处理数据的展示.....。我们知道,Binding是沟通Xaml和数据源的桥梁,而大部分时候,我们的数据源都是一个实体类实例或者实体类实例集合。故在我们潜意识里,要展示一份数据,几乎必须写实体类不可。本文的目的就是使用一种‘巧妙的方式’,让我们不写实体类也可以Bingding.....从而显示数据。

准备

   我们的目的非常简单,写一个方法,传入字符串的JSON数据,让DataGrid显示数据。Json数据如下。特别注意该JSON格式。JSON数据如下。

View Code
[
    {
        "PersonAidsID": "ff9619ff-8b46-d011-b42d-00c04fc934f1",
        "IDNum": "594832934875849485",
        "Sex": "1",
        "RecordTime": "2012/2/28 10:29:34",
        "Address": "合额度126号",
        "Name": "陈-冠-希是你",
        "Age": "34",
        "GeographicLocation": "43.887594849178,81.3012265555597",
        "IllnessNarratives": "2",
        "得病类型": "",
        "民族": "",
        "吸毒史": "",
        "VillageID": "ff9619ff-8b46-d011-b42d-00c04fc934f6"
    },
    {
        "PersonAidsID": "ff9619ff-8b46-d011-b42d-00c04fc934f1",
        "IDNum": "594832934875849485",
        "Sex": "1",
        "RecordTime": "2012/2/28 10:29:34",
        "Address": "合额度126号",
        "Name": "陈-冠-希是你",
        "Age": "34",
        "GeographicLocation": "43.887594849178,81.3012265555597",
        "IllnessNarratives": "2",
        "得病类型": "",
        "民族": "",
        "吸毒史": "",
        "VillageID": "ff9619ff-8b46-d011-b42d-00c04fc934f6"
    },
    {
        "PersonAidsID": "ff9619ff-8b46-d011-b42d-00c04fc934f1",
        "IDNum": "594832934875849485",
        "Sex": "1",
        "RecordTime": "2012/2/28 10:29:34",
        "Address": "合额度126号",
        "Name": "陈-冠-希是你",
        "Age": "34",
        "GeographicLocation": "43.887594849178,81.3012265555597",
        "IllnessNarratives": "2",
        "得病类型": "",
        "民族": "",
        "吸毒史": "",
        "VillageID": "ff9619ff-8b46-d011-b42d-00c04fc934f6"
    },
    {
        "PersonAidsID": "ff9619ff-8b46-d011-b42d-00c04fc934f1",
        "IDNum": "594832934875849485",
        "Sex": "1",
        "RecordTime": "2012/2/28 10:29:34",
        "Address": "合额度126号",
        "Name": "陈-冠-希是你",
        "Age": "34",
        "GeographicLocation": "43.887594849178,81.3012265555597",
        "IllnessNarratives": "2",
        "得病类型": "",
        "民族": "",
        "吸毒史": "",
        "VillageID": "ff9619ff-8b46-d011-b42d-00c04fc934f6"
    },
    {
        "PersonAidsID": "ff9619ff-8b46-d011-b42d-00c04fc934f1",
        "IDNum": "594832934875849485",
        "Sex": "1",
        "RecordTime": "2012/2/28 10:29:34",
        "Address": "合额度126号",
        "Name": "陈-冠-希是你",
        "Age": "34",
        "GeographicLocation": "43.887594849178,81.3012265555597",
        "IllnessNarratives": "2",
        "得病类型": "",
        "民族": "",
        "吸毒史": "",
        "VillageID": "ff9619ff-8b46-d011-b42d-00c04fc934f6"
    },
    {
        "PersonAidsID": "ff9619ff-8b46-d011-b42d-00c04fc934f1",
        "IDNum": "594832934875849485",
        "Sex": "1",
        "RecordTime": "2012/2/28 10:29:34",
        "Address": "合额度126号",
        "Name": "陈-冠-希是你",
        "Age": "34",
        "GeographicLocation": "43.887594849178,81.3012265555597",
        "IllnessNarratives": "2",
        "得病类型": "",
        "民族": "",
        "吸毒史": "",
        "VillageID": "ff9619ff-8b46-d011-b42d-00c04fc934f6"
    },
    {
        "PersonAidsID": "ff9619ff-8b46-d011-b42d-00c04fc934f1",
        "IDNum": "594832934875849485",
        "Sex": "1",
        "RecordTime": "2012/2/28 10:29:34",
        "Address": "合额度126号",
        "Name": "陈-冠-希是你",
        "Age": "34",
        "GeographicLocation": "43.887594849178,81.3012265555597",
        "IllnessNarratives": "2",
        "得病类型": "",
        "民族": "",
        "吸毒史": "",
        "VillageID": "ff9619ff-8b46-d011-b42d-00c04fc934f6"
    },
    {
        "PersonAidsID": "ff9619ff-8b46-d011-b42d-00c04fc934f1",
        "IDNum": "594832934875849485",
        "Sex": "1",
        "RecordTime": "2012/2/28 10:29:34",
        "Address": "合额度126号",
        "Name": "陈-冠-希是你",
        "Age": "34",
        "GeographicLocation": "43.887594849178,81.3012265555597",
        "IllnessNarratives": "2",
        "得病类型": "",
        "民族": "",
        "吸毒史": "",
        "VillageID": "ff9619ff-8b46-d011-b42d-00c04fc934f6"
    },
    {
        "PersonAidsID": "ff9619ff-8b46-d011-b42d-00c04fc934f1",
        "IDNum": "594832934875849485",
        "Sex": "1",
        "RecordTime": "2012/2/28 10:29:34",
        "Address": "合额度126号",
        "Name": "陈-冠-希是你",
        "Age": "34",
        "GeographicLocation": "43.887594849178,81.3012265555597",
        "IllnessNarratives": "2",
        "得病类型": "",
        "民族": "",
        "吸毒史": "",
        "VillageID": "ff9619ff-8b46-d011-b42d-00c04fc934f6"
    }
]

 

 服务端:

   特别注意我的服务端.....  就是一个ASPX的页面。然后使用Response.Write 的方法向客户端输送数据。个人觉得这种方式简单又灵活。比起WCF。

最后的服务端如下

          

 

客户端取得数据:

string dataUrl = HtmlPage.Document.DocumentUri.AbsoluteUri.Replace("Default.aspx", "Handler/Data.aspx");
WebClient webClient = new WebClient();
webClient.DownloadStringAsync(new Uri(dataUrl));
webClient.DownloadStringCompleted += (sender1, e1) =>
{
  MessageBox.Show(e1.Result);
};

 

呵呵这写法非常常见。   但值得各位注意的是:

string dataUrl = HtmlPage.Document.DocumentUri.AbsoluteUri.Replace("Default.aspx", "Handler/Data.aspx");  

这个写法。这样的话,不管换哪个IP,都不会有问题。

反射实体类来咯

      上面客户端已经可以取得数据了。接下来要做的就是怎么把JSON转换为实体类实例集合。

   有三步工作要做。

      1:从JSON中获得列头。(见代码中GetCoumsByJson 方法)

      2:从列头反射形成实体类。(见代码中getTypeByStrList方法)

  3:反序列化形成实体类集合。

  下面直接上代码。怎么做的。看代码便知。

  http://files.cnblogs.com/MySilverlight/SilverlightApplication2.zip

     诸位看看代码便知。注意跑起来之后浏览首页要点击一下那个按钮才显示数据哦

会影响性能吗?

   基本不会。因为即便是使用反射形成实体类。但请注意,这里是使用的Emit的方式。这种反射方式不咋影响性能....。

 

 

后话:这算做是我框架介绍的开篇....  呵呵  一共五偏 呵呵

posted @ 2012-05-24 20:43 银光小子 阅读(966) 评论(7) 编辑
摘要: 搞Silverlight不用这个基本是傻逼阅读全文
posted @ 2012-01-30 19:49 银光小子 阅读(2244) 评论(24) 编辑
摘要: 12306的根本问题不是那些海量访问啊分布式啊负载均衡啊..... 等等那些大牛们夸夸奇谈的狗屎。 其实只需要简单的一变即可改变现状。顺便请那些没在网上买过火车票的在夸夸奇谈的大妞们先去买个票再来发言。阅读全文
posted @ 2012-01-08 22:35 银光小子 阅读(4407) 评论(54) 编辑
    只有注册用户登录后才能阅读该文。阅读全文
posted @ 2012-01-07 12:51 银光小子 阅读(798) 评论(28) 编辑
摘要: 开篇 最近在做一个Silverlight的框架。 噢,这是一个仅仅工作一年半的没学历的我做的!! 现在还在开发中..... 因最近领导要看。我想先写一篇简单的文章来介绍我的这种TagSL编程。 事先声明,这种编程与传统的编程模式格格不入。不用ORM,不写实体类,设计模式貌似没有,甚至会要在XAML里写Sql语句哦,并且强制要求没特殊情况不能动服务端的代码啊!并且没用WCF等高深技术啊!甚至于你会发现怎么我还提倡XAML文件用中文命名!............. 如果你是自认为‘大牛’的并且喜欢乱喷的人,请绕道,寒舍承受不了您大驾光临。当然,如果你有一定的编程经验,并愿意以平...阅读全文
posted @ 2011-12-11 22:10 银光小子 阅读(1681) 评论(17) 编辑
摘要: SIlverlight牛逼的程序员,在我看来是SIlverlight博客最好(IN CHINA)的程兴亮大哥来访 各位可去31楼膜拜。在此我郑重申明:1:本项目属于半成品功能均未实现。中途个人决定转成开源的学习项目。性质变为非商用的学习项目。2:本项目使用了某网友做的项目的样式文件(表格样式文件),还有一些图片文件。并在界面上模仿了该网友的一些功能。比如表格的内容等。但这些内容中的功能并未实现,都是放在那好看的。但我还是向该网友致歉。3:必须声明的是,本项目核心功能,即实时定位的功能.... 除了一些表格的样式,其中放着好看的字段以外。其余界面布局等均为本人所编写。之前本人说代码均为自己写的.阅读全文
posted @ 2011-12-05 00:18 银光小子 阅读(8390) 评论(101) 编辑
摘要: 本来这篇文章已经下了头条 下了精华区 ... 影响力已经不在 可是不知道哪来的一股力量 莫名奇妙地一堆人来攻击我质疑我 他们所持的核心观点就是 既然我是清华IT的 那为什么就要 来这说清华IT的坏话呢??? 我一遍一遍的根他们解释 一来这是改革之必要 二来这种坏话本身不是针对我们这个机构而是针对所有机构 三来 我说了什么很实质性的坏话了,都是实话啊??? 某个名为“蝶恋花”的网友有篇评论尤为...阅读全文
posted @ 2011-03-07 00:35 银光小子 阅读(11829) 评论(344) 编辑