|
因為Silverlight可以訪問HTML中的DOM元素以及調(diào)用HTML頁面中的JS方法,并且可以將自身的方法"暴露"給HTML頁面中的JS方法(通過[ScriptableMember]),所以我們可以利用這一特點來實現(xiàn)兩個Silverlight應(yīng)用程序之間的數(shù)據(jù)通信。為了直觀起見,本人做了這個DEMO,希望能夠?qū)Υ蠹以诶斫馍嫌兴鶐椭?/p>
本DEMO的工作流程如下:
Silverlight 1 調(diào)用HTML中的JS方法,而該方法會去調(diào)用Silverlight 2中“暴露”的方法來顯示選中的數(shù)據(jù)。
請大家先看一下這個DEMO的運行效果,如下圖所示:
在上圖中分別有兩個Silverlight應(yīng)用,一個是雇員列表,一個是詳細信息。其中的雇員列表是我以前在園子里發(fā)表過的一遍文章中提到的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中的腳本代碼可以訪問(即可見)。
而下面的代碼則是為了定義一個“腳本對象類”及其事件處理(包括參數(shù))。
/// <summary>/// 雇員事件參數(shù)(用于完成與js綁定事件參數(shù))
/// </summary>
[ScriptableType]
public class EmployeeInfoEventArgs : EventArgs
{
[ScriptableMember]
public EmployeeInfo employeeInfo { get; set; }
}
/// <summary>
/// 要注冊并在頁面中使用的js調(diào)用腳本對象
/// </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
});
}
}
}
有了數(shù)據(jù)和數(shù)據(jù)結(jié)構(gòu),我們可以在應(yīng)用程序中給列表控件綁定數(shù)據(jù)源了,如下:
//這里必須聲明是public,否則js調(diào)用該方法時會報錯[ScriptableMember]
public void LoadData(int count)
{
//加載指定數(shù)據(jù)的雇員信息
EmployeeList.ItemsSource = new EmployeeManager().GetEmployeeList(count);
}
到這里,基本上DEMO中的主要內(nèi)容就介紹完了。
下面再給大家演示一個Silverlight與FLASH進行數(shù)據(jù)通信 的例子,其實現(xiàn)的功能如下:
在Silverlight應(yīng)用中拖動一張圖片,在右側(cè)的FLASH區(qū)域中相應(yīng)的FLASH對象跟著被“移動”,其效果如下圖所示:


其實這個DEMO最初的原型出自微軟件的黃繼佳,我是在一次SILVERLIGHT培訓中看到他這個演示,當時我想實現(xiàn)原理應(yīng)該與本文所提到的大同小異,后來被證實現(xiàn)確實如此。當然他的演示中實現(xiàn)的JS代碼很簡單,完全就是用純JS來實現(xiàn)即可。我這里并未完全使用了他的模型代碼。因為上面所說的是在CS代碼中進行事件的綁定及其相關(guān)操作,所以我還是照上面所提供的思路重新寫了這個DEMO,實現(xiàn)的效果與黃紀佳的原型基本相似。因為篇幅起見,這里就不多做贅述了,大家下載代碼后一看便知(SLImage.xaml.cs和SLtoFlash.htm文件)。
好的,今天的內(nèi)容就先到這里了。
NET技術(shù):在兩個Silverlight應(yīng)用間應(yīng)用間數(shù)據(jù)通信DEMO(包括與Flash通信),轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。