- 浏览: 648445 次
- 性别:
- 来自: 石家庄
文章分类
最新评论
-
abao1:
老贾 在安装IDEA的过程中,在激活步骤时,按如下操作即可: ...
IntelliJ IDEA 2016注册方法和注册码 -
bo_hai:
./usr/bin/java: symbol lookup ...
jmagick安装步骤 -
wxcking:
不错的, 收藏一下
JAVA使用POI生成Excel文件 -
zgyfh:
大哥,密码是多少啊?zgyfh@tom.com谢谢了!新手学习 ...
WPF做的必备示例 -
记忆无泪:
jiasongmao 写道你的邮箱是多少,我可以发源代码到邮箱 ...
WPF做的必备示例
声明:该博文转载自:http://daizhj.blog.51cto.com/285189/124340
因为Silverlight可以访问HTML中的DOM元素以及调用HTML页面中的JS方法,并且可以将自身的方法“暴露”给HTML页面中的JS方法(通过ScriptableMember]),所以我们可以利用这一特点来实现两个Silverlight应用程序之间的数据通信。为了直观起见,本人做了这个DEMO,希望能够对大家在理解上有所帮助。
本DEMO的工作流程如下:
Silverlight 1 调用HTML中的JS方法,而该方法会去调用Silverlight 2中“暴露”的方法来显示选中的数据。
Silverlight 1 调用HTML中的JS方法,而该方法会去调用Silverlight 2中“暴露”的方法来显示选中的数据。
请大家先看一下这个DEMO的运行效果,如下图所示:
在上图中分别有两个Silverlight应用,一个是雇员列表,一个是详细信息。其中的雇员列表是我以前在园子里发表过的一遍文章中提到的DEMO,这里只是为了便于演示而简单的加以改造,其雇员类信息如下:
[ScriptableType] public class EmployeeInfo { /// <summary> /// 雇员编号 /// </summary> [ScriptableMember] public int EmployeeNo { get; set; } /// <summary> /// 雇员名称 /// </summary> [ScriptableMember] public string EmployeeName { get; set; } /// <summary> /// 地址 /// </summary> [ScriptableMember] public string Address { get; set; } }
上面的ScriptableType,ScriptableMember属性绑写是为了让html中的脚本代码可以访问(即可见)。
而下面的代码则是为了定义一个“脚本对象类”及其事件处理(包括参数)。
而下面的代码则是为了定义一个“脚本对象类”及其事件处理(包括参数)。
/// <summary> /// 雇员事件参数(用于完成与js绑定事件参数) /// </summary> [ScriptableType] public class EmployeeInfoEventArgs : EventArgs { [ScriptableMember] public EmployeeInfo employeeInfo { get; set; } } /// <summary> /// 要注册并在页面中使用的js调用脚本对象 /// </summary> [ScriptableType] public class JavaScriptableObject { /// <summary> /// js捆绑的事件处理器 /// </summary> [ScriptableMember] public event EventHandler<EmployeeInfoEventArgs> SelectEmployeeInfo; public void OnSelectEmployeeInfo(EmployeeInfo employeeinfo) { if (SelectEmployeeInfo != null) { SelectEmployeeInfo(this, new EmployeeInfoEventArgs() { employeeInfo = employeeinfo }); } } }
接着就是一个雇员数据操作类,主要用于获取雇员信息,如下:
/// <summary> /// 雇员信息管理类 /// </summary> public class EmployeeManager { public IEnumerable<EmployeeInfo> employeeList; /// <summary> /// 初始化会员数据 /// </summary> public EmployeeManager() { //初始化雇员数据 employeeList = new List<EmployeeInfo>() { new EmployeeInfo(){EmployeeNo = 10001, EmployeeName = "张三" , Address = "北京"}, new EmployeeInfo(){EmployeeNo = 10002, EmployeeName = "李四" , Address = "北京"}, new EmployeeInfo(){EmployeeNo = 10003, EmployeeName = "王五" , Address = "北京"}, new EmployeeInfo(){EmployeeNo = 10004, EmployeeName = "马六" , Address = "北京"}, new EmployeeInfo(){EmployeeNo = 10005, EmployeeName = "王大麻子" , Address = "北京"}, new EmployeeInfo(){EmployeeNo = 10006, EmployeeName = "王宝强" , Address = "北京"}, new EmployeeInfo(){EmployeeNo = 10007, EmployeeName = "王蛋蛋" , Address = "北京"}, new EmployeeInfo(){EmployeeNo = 10008, EmployeeName = "王五强" , Address = "北京"} }; } /// <summary> /// 获取指定数量的雇员数据 /// </summary> /// <param name="count">要获取的雇员信息数</param> /// <returns></returns> public IEnumerable<EmployeeInfo> GetEmployeeList(int count) { return (from e in employeeList select new EmployeeInfo { EmployeeNo = e.EmployeeNo, EmployeeName = e.EmployeeName, Address = e.Address }).Take(count); } }
有了数据和数据结构,我们可以在应用程序中给列表控件绑定数据源了,如下:
//这里必须声明是public,否则js调用该方法时会报错 [ScriptableMember] public void LoadData(int count) { //加载指定数据的雇员信息 EmployeeList.ItemsSource = new EmployeeManager().GetEmployeeList(count); }
当然DEMO中所提供的功能里有“选取某一行雇员信息”的操作,其实现方法如下:
/// <summary> /// 单击编辑雇员列表信息事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void EmployeeList_BeginningEdit(object sender, DataGridBeginningEditEventArgs e) { //当有要编辑的信息时 if (EmployeeList.SelectedItem != null) { EmployeeInfo employeeInfo = EmployeeList.SelectedItem as EmployeeInfo; //执行选中信息事件操作(最终会执行js所绑定的function代码) javaScriptableObject.OnSelectEmployeeInfo(employeeInfo); } }
大家请注意上面的这一行代码:
其完成的就是对HTML页面上JS绑定事件的调用,其JS绑写事件代码如下:
javaScriptableObject.OnSelectEmployeeInfo(employeeInfo);
其完成的就是对HTML页面上JS绑定事件的调用,其JS绑写事件代码如下:
//初始化操作 function Init(obj) { //绑定js函数到silverlight的事件处理器 $get("Xaml1").content.EmployeeObject.SelectEmployeeInfo = ShowSelectEmployeeInfo; }
当然,上面还有一个内容没有说明,即EmployeeObject对象是从哪来的,其实它就是我们公布到HTML中让 JS可以访问的对象JavaScriptableObject的实例,如下:
JavaScriptableObject javaScriptableObject; void Page_Loaded(object sender, RoutedEventArgs e) { javaScriptableObject = new JavaScriptableObject(); //注册js可用的类型(详情见Silverlight_JS_callTestPage.aspx中的js代码) HtmlPage.RegisterScriptableObject("EmployeeObject", javaScriptableObject); .. }
而JS方法"ShowSelectEmployeeInfo"即是实现对Silverlight 2应用中“暴露”方法的调用。其内容如下:
//显示选取的雇员信息 function ShowSelectEmployeeInfo(sender, args) { $get("Xaml2").content.Page.LoadDetailData(parseInt(args.employeeInfo.EmployeeNo), args.employeeInfo.EmployeeName, args.employeeInfo.Address); }
而Silverlight 2应用中的LoadDetailData方法所实现的就是将选中的单个雇员信息进行显示,如下:
//这里必须声明是public,否则js调用该方法时会报错 [ScriptableMember] public void LoadDetailData(int employeeNo, string employeeName, string address) { //加载指定数据的雇员信息 EmployeeNo.Text = employeeNo.ToString(); EmployeeName.Text = employeeName; Address.Text = address; }
到这里,基本上DEMO中的主要内容就介绍完了。
下面再给大家演示一个Silverlight与FLASH进行数据通信 的例子,其实现的功能如下:
在Silverlight应用中拖动一张图片,在右侧的FLASH区域中相应的FLASH对象跟着被“移动”,其效果如下
图所示:
下面再给大家演示一个Silverlight与FLASH进行数据通信 的例子,其实现的功能如下:
在Silverlight应用中拖动一张图片,在右侧的FLASH区域中相应的FLASH对象跟着被“移动”,其效果如下
图所示:
其实这个DEMO最初的原型出自微软件的黄继佳,我是在一次SILVERLIGHT培训中看到他这个演示,当时我想实现原理应该与本文所提到的大同小异,后来被证实现确实如此。当然他的演示中实现的JS代码很简单,完全就是用纯JS来实现即可。我这里并未完全使用了他的模型代码。因为上面所说的是在CS代码中进行事件的
绑定及其相关操作,所以我还是照上面所提供的思路重新写了这个DEMO,实现的效果与黄纪佳的原型基本相似。因为篇幅起见,这里就不多做赘述了,大家下载代码后一看便知(SLImage.xaml.cs和SLtoFlash.htm文件)。
绑定及其相关操作,所以我还是照上面所提供的思路重新写了这个DEMO,实现的效果与黄纪佳的原型基本相似。因为篇幅起见,这里就不多做赘述了,大家下载代码后一看便知(SLImage.xaml.cs和SLtoFlash.htm文件)。
作者:代震军,daizhj
- DataTransferInSL.rar (98.9 KB)
- 下载次数: 8
发表评论
-
silvelright酷站
2011-03-22 18:47 773http://completit.com/# -
silverlight翻转代码
2011-03-13 18:46 1073using System; using System.Net ... -
silverlight独立存储示例
2011-03-07 17:17 1018void CreateDir(string dirNam ... -
silverlight SDK和toolit中控件英文如何转换为英文
2010-11-11 15:50 959解决方法: 设置 ... -
Silverlight4:网络地图服务
2010-10-16 11:01 1527Bing Maps与Google Earth一样 ... -
通过JS创建silverlight对象
2010-10-12 13:04 1596前言: 对于我们开发的silverlight应用来讲,有的时 ... -
silverlight childwindow源码
2010-09-18 21:17 1935<!-- // (c) Copyright Micro ... -
精彩的 Silverlight 开源项目
2010-08-18 14:32 2889Silverlight 物理模型 http://www.c ... -
MEF程序设计指南五:迟延(Lazy)加载导出部件(Export Part)与元数据(Metadata)
2010-08-12 10:34 897本文章非原创,转载自: 作 者:Beniao 文 ... -
MEF程序设计指南四:使用MEF声明导出(Exports)与导入(Imports)
2010-08-12 10:03 569本文章非原创,转载自: 作 者:Beniao 文 ... -
MEF程序设计指南三:MEF中组合部件(Composable Parts)与契约(Contracts)的基本应用
2010-08-12 09:52 505本文章非原创,转载自: 作 者:Beniao 文 ... -
MEF程序设计指南二:Silverlight中使用CompositionInitializer宿主MEF
2010-08-12 09:24 823本系列文章非原创,转载自: 作 者:Beniao ... -
MEF程序设计指南一:在应用程序中宿主MEF
2010-08-12 09:17 984本系列文章非原创,转 ... -
silverlight应用程序库缓存
2010-08-10 14:22 1467应用程序库缓存可在用户重新访问网站时帮助改善启动性能。 ... -
Prism动态模块加载
2010-08-10 10:27 1548这篇介绍模块在silverlight的特殊应用. sil ... -
Silverlight中Json数据的转换方法(中文)
2010-08-04 11:36 1207[DataContract] public clas ... -
silverlight万花筒效果
2010-07-28 16:14 834见附件。 -
silverlight如何将颜色字符串转换为颜色
2010-07-02 10:42 1501public class ColorUtil { ... -
silverlight中Tab转Enter的实现方法
2010-06-04 17:38 1695silverlight项目中要求界面全键盘操作,并且在光标移动 ... -
silverlight和js相互调用
2010-05-13 16:56 1629步骤一:在silverlight后台代码类中声明被js调用的方 ...
相关推荐
silverlight与wcf通信简单应用
(1)创建第一个Silverlight应用
从建立Silverlight应用程序,一步一步到建立WCF通信
silverlight导出DataGrid数据实例
创建第一个Silverlight应用
(14)silverlight网络通信与开发示例
Silverlight 中的 HTTP 通信和安全
本次项目采用Silverlight实现一个简单的个人多媒体平台,通过该平台,用户可以搜索自己喜欢的多媒体文件,在线播放(其播放质量优于Flash);还可以参与评论、上传自己的作品。 技能点描述: 1.Silverlight常用控件...
silverlight 支持多种异步数据访问,这里列出了三种数据访问通信方式
Silverlight + WCF 数据压缩源码和例子(看readme.txt)
Silverlight 3 wcf 双工通信
flash转silverlight工具,部分需要破解
(1):创建一个基本的Silverlight应用 (2):基本控件 (3):界面布局 (4):鼠标事件处理 (5):实现简单的拖放功能 (6):键盘事件处理 (7):全屏模式支持 (8):使用样式封装控件观感 (9):...
silverlight 数据压缩例子,可在silverlight通信的时候使用,优化数据传输 http://www.dotnetdev.cn
silverlight 3.0中利用自定义集合绑定数据控件
笔者最近的工作使用到Azure和Silverlight,所以决定创建一个Silverlight程序,让它在ASP.NET MVC2应用程序中运行。本次实验使用了Visual Studio 2010,Silverlight 4和Azure SDK。
Silverlight绑定数据的例子 一个Silverlight数据绑定的示例源码,数据直接写到程序之中 在VS项目中右键“在浏览器中查看”即可看到效果
请注意:由于文件过大分卷压缩,一共两个压缩包(),请下载后放在同一目录下再解压缩,只下载其中一个无法使用,这是第二个分卷压缩包,重名还不上传,请下载后将压缩包改为和第一个压缩包名称一致(扩展名不改)再解...
Microsoft Silverlight 是一个跨浏览器、跨平台的 .NET Framework 实现,用于获得 Web 的媒体体验和丰富交互式应用程序。以下各节说明如何使用 Silverlight 生成应用程序: Silverlight 的 .NET Framework 类库 ...