在两个Silverlight应用间应用间数据通信DEMO(包括与Flash通信)

因为Silverlight可以访问HTML中的DOM元素以及调用HTML页面中的JS方法,并且可以将自身的方法"暴露"给HTML页面中的JS方法(通过[ScriptableMember]),所以我们可以利用这一特点来实现两个Silverlight应用程序之间的数据通信。为了直观起见,本人做了这个DEMO,希望能够对大家在理解上有所帮助。

本DEMO的工作流程如下:

Silverlight 1 调用HTML中的JS方法,而该方法会去调用Silverlight 2中“暴露”的方法来显示选中的数据。

请大家先看一下这个DEMO的运行效果,如下图所示:

在上图中分别有两个Silverlight应用,一个是雇员列表,一个是详细信息。其中的雇员列表是我以前在园子里发表过的一遍文章中提到的DEMO,这里只是为了便于演示而简单的加以改造,其雇员类信息如下:

[ScriptableType]
public class EmployeeInfo
{
    
/// <summary>
    
/// 雇员编号
    
/// </summary>
    [ScriptableMember]
    
public int EmployeeNo { getset; }
    
/// <summary>
    
/// 雇员名称
    
/// </summary>
    [ScriptableMember]
    
public string EmployeeName { getset; }
    
/// <summary>
    
/// 地址
    
/// </summary>
    [ScriptableMember]
    
public string Address { getset; }
}

  上面的ScriptableType,ScriptableMember属性绑写是为了让html中的脚本代码可以访问(即可见)。

而下面的代码则是为了定义一个“脚本对象类”及其事件处理(包括参数)。

/// <summary>
/// 雇员事件参数(用于完成与js绑定事件参数)
/// </summary>
[ScriptableType]
public class EmployeeInfoEventArgs : EventArgs
{
    [ScriptableMember]
    
public EmployeeInfo employeeInfo { getset; }
}

/// <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(
thisnew EmployeeInfoEventArgs()
            {
                employeeInfo 
= employeeinfo
            });
        }
    }
}

有了数据和数据结构,我们可以在应用程序中给列表控件绑定数据源了,如下:

//这里必须声明是public,否则js调用该方法时会报错
[ScriptableMember]
public void LoadData(int count)
{
    
//加载指定数据的雇员信息
    EmployeeList.ItemsSource = new EmployeeManager().GetEmployeeList(count);
}

到这里,基本上DEMO中的主要内容就介绍完了。

下面再给大家演示一个Silverlight与FLASH进行数据通信 的例子,其实现的功能如下:

在Silverlight应用中拖动一张图片,在右侧的FLASH区域中相应的FLASH对象跟着被“移动”,其效果如下图所示:

 
 
 

其实这个DEMO最初的原型出自微软件的黄继佳,我是在一次SILVERLIGHT培训中看到他这个演示,当时我想实现原理应该与本文所提到的大同小异,后来被证实现确实如此。当然他的演示中实现的JS代码很简单,完全就是用纯JS来实现即可。我这里并未完全使用了他的模型代码。因为上面所说的是在CS代码中进行事件的绑定及其相关操作,所以我还是照上面所提供的思路重新写了这个DEMO,实现的效果与黄纪佳的原型基本相似。因为篇幅起见,这里就不多做赘述了,大家下载代码后一看便知(SLImage.xaml.cs和SLtoFlash.htm文件)。

好的,今天的内容就先到这里了。

NET技术在两个Silverlight应用间应用间数据通信DEMO(包括与Flash通信),转载需保留来源!

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。