silverlight与javascript交互操作

来源:代震军BLOG - 博客园

  在silverlight开发中,我们可以使用js来调用silverlight中的方法(当然方法上要捆绑相应属性),也可以将指定的js方法绑定到silverlight应用中的事件上.本DEMO演示了通过js调用完成silverlight数据列表控件(DataGrid)的数据绑定操作,并通过DataGrid的EmployeeList_BeginningCellEdit事件将当前选取的数据行信息返回到js所绑定的事件参数上,并调用该js方法显示选中数据行信息,如下图所示:



下面介绍一下主要的开发过程:)

首先,我们需要建立一个Silverlight Application ,名称为:Silverlight_JS_call.

然后我们要在当前的项目中加入一个类文件,名称为:EmployeeInfo.cs.

下面是相应的代码,相关内容见注释:

[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; }
}
/// <summary>
/// 雇员事件参数(用于完成与js绑定事件参数)
/// </summary>
[ScriptableType]
public class EmployeeInfoEventArgs : EventArgs
{
[ScriptableMember]
public EmployeeInfo employeeInfo{ get; set; }
}

/// <summary>
/// 要注册并在页面中使用的js调用脚本对象
/// </summary>
[ScriptableType]
public class JavaScriptableObject
{
/// <summary>
/// js捆绑的事件handler
/// </summary>
[ScriptableMember]
public event EventHandler<EmployeeInfoEventArgs> SelectEmployeeInfo;

public void _disibledevent= ShowSelectEmployeeInfo;

//加载雇员信息
$get("Xaml1").content.Page.LoadData(parseInt(obj.title));
}
</script>


另外在进行初始化操作,这里使用了onclick方法来执行操作,而不是直接运行相应代码.原因是silverlight对象加载是使用了异步方式,这样会造成对象实例化完成时间迟于页面JS脚本的运行时间.这样设计的原因,我个人认为主要是UE方面的考虑.而这时如果脚本中直接调用对象实例化的属性或方法时,会出现对象未知的情况.
Tags: 

延伸阅读

最新评论

发表评论