在两个Silverlight应用间应用间数据通信DEMO(包括与Flash通信)
[1] 在两个Silverlight应用间应用间数据通信DEMO(包括与Flash通信)
[2] 在两个Silverlight应用间应用间数据通信DEMO(包括与Flash通信)
[3] 在两个Silverlight应用间应用间数据通信DEMO(包括与Flash通信)
[4] 在两个Silverlight应用间应用间数据通信DEMO(包括与Flash通信)
[2] 在两个Silverlight应用间应用间数据通信DEMO(包括与Flash通信)
[3] 在两个Silverlight应用间应用间数据通信DEMO(包括与Flash通信)
[4] 在两个Silverlight应用间应用间数据通信DEMO(包括与Flash通信)
有了数据和数据结构,我们可以在应用程序中给列表控件绑定数据源了,如下:
//这里必须声明是public,否则js调用该方法时会报错
[ScriptableMember]
public void LoadData(int count)
{
//加载指定数据的雇员信息
EmployeeList.ItemsSource = new EmployeeManager().GetEmployeeList(count);
}
[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);
}
}
/// 单击编辑雇员列表信息事件
/// </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);
}
}
大家请注意上面的这一行代码:
javaScriptableObject.OnSelectEmployeeInfo(employeeInfo);
其完成的就是对HTML页面上JS绑定事件的调用,其JS绑写事件代码如下:
//初始化操作
function Init(obj) {
//绑定js函数到silverlight的事件处理器
$get("Xaml1").content.EmployeeObject.SelectEmployeeInfo =
ShowSelectEmployeeInfo;
}
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);
}
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);
}
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;
}
[ScriptableMember]
public void LoadDetailData(int employeeNo, string employeeName, string address)
{
//加载指定数据的雇员信息
EmployeeNo.Text = employeeNo.ToString();
EmployeeName.Text = employeeName;
Address.Text = address;
}