silverlight
发布时间:2022-05-04 发布网站:大佬教程 code.js-code.com
大佬教程收集整理的这篇文章主要介绍了silverlight与javascript交互操作,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
概述
在silverlight开发中,我们可以使用js来调用silverlight中的方法(当然方法上要捆绑相应属性),也可以将指定 的js方法绑定到silverlight应用中的事件上.本DEMO演示了通过js调用完成silverlight数据列表控件(DataGrid)的数 据绑定操作,并通过DataGrid的
employeeLis
T_BeginningCellEdit事件将当前选取的数据行信息
在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
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
=
"
李四
"
,
new
employeeInfo(){employeeNo
=
10003
, employeename
=
"
王五
"
,
new
employeeInfo(){employeeNo
=
10004
, employeename
=
"
马六
"
,
new
employeeInfo(){employeeNo
=
10005
, employeename
=
"
王大麻子
"
,
new
employeeInfo(){employeeNo
=
10006
, employeename
=
"
王宝强
"
,
new
employeeInfo(){employeeNo
=
10007
, employeename
=
"
王蛋蛋
"
,
new
employeeInfo(){employeeNo
=
10008
, employeename
=
"
王五强
"
, Address
=
"
北京
"
}
};
}
///
<sumMary>
///
@L_674_20@指定数量的雇员数据
///
</sumMary>
///
<param NAME="count">
要@L_674_20@的雇员信息数
</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);
}
}
上面代码中要注意的是[ScriptableType]和[ScriptableMember],前者允许Silverlight把类型暴露给脚本,后者
则会把成员方法或属性暴露给脚本.
而下面的代码就是page.xaml中的内容:
<
UserControl
xmlns:my
="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"
x:Class
="Silverlight_JS_call.Page"
xmlns
="http://scheR_607_11845@as.microsoft.com/client/2007"
xmlns:x
="http://scheR_607_11845@as.microsoft.com/winfx/2006/xaml"
Width
="400"
Height
="300"
>
<
Grid
x:Name
="LayoutRoot"
BACkground
="White"
>
<
Grid.RowDeFinitions
>
<
RowDeFinition
Height
="300"
/>
</
Grid.RowDeFinitions
>
<
@H_549_491
@my:DataGrid
x:Name
="employeeList"
Grid.Row
="1"
AutoGeneratecolumns
="True"
Height
="280"
Margin
="5,5,5"
AlternaTingRowBACkground
="AliceBlue"
rowBACkground
="BlanchedAlmond"
>
</
@H_549_491
@my:DataGrid
>
</
Grid
>
</
UserControl
>
下面则是相应的page.xaml.cs文件的内容(相关内容见注释):
[ScriptableType]
public
partial
class
Page : UserControl
{
public
Page()
{
InitializeComponent();
this
.Loaded
+=
Page_Loaded;
this
.employeeList.beginningCellEdit
+=
new
EventHandler
<
DataGridCellEdiTingCancelEventArgs
>
(employeeLisT_BeginningCellEdit);
}
void
Page_Loaded(
object
sender, routedEventArgs E)
{
JavaScriptabLeobject
=
new
JavaScriptabLeobject();
//
注册js可用的类型(详情见Silverlight_JS_callTestPage.aspx中的js代码)
HtmlPage.RegisterScriptabLeobject(
"
employeeObject
"
, JavaScriptabLeobject);
HtmlPage.RegisterScriptabLeobject(
"
Page
"
,
this
);
}
///
<sumMary>
///
击编辑雇员列表信息事件
///
</sumMary>
///
<param NAME="sender"></param>
///
<param NAME="e"></param>
void
employeeLisT_BeginningCellEdit(
object
sender, DataGridCellEdiTingCancelEventArgs E)
{
//
当有要编辑的信息时
if
(employeeList.SELEctedItem
!=
null
)
{
employeeInfo employeeInfo
=
employeeList.SELEctedItem
as
employeeInfo;
//
执行选中信息事件操作(最终会执行js所绑定的function代码)
JavaScriptabLeobject.onSELEctemployeeInfo(employeeInfo);
}
}
//
这里必须声明是public,否则js调用该方法时会报错
[ScriptableMember]
public
void
LoadData(
int
count)
{
//
加载指定数据的雇员信息
employeeList.Itemssource
=
new
employeeManager().GetemployeeList(count);
}
JavaScriptabLeobject JavaScriptabLeobject;
}
上面代码要注意的是RegisterScriptabLeobject方法的调用,它用来注册可被脚本使用的对象实例,
与它相对应的还有一个方法RegisterCreateableType,它用于注册可被脚本使用的类型.
到这里,基本上完成的cs代码的开发工作.下面则是相应的js调用以及事件绑定代码了,请看:
<
script type
=
"
text/javascript
"
>
//
显示选取的雇员信息
//
注:args为cs中的employeeInfoEventArgs类型实例
function
ShowSELEctemployeeInfo(sender, args)
{
$get(
"
employeeNo
"
).value
=
args.employeeInfo.employeeNo;
$get(
"
employeename
"
).value
=
args.employeeInfo.employeename;
$get(
"
employeeAddress
"
).value
=
args.employeeInfo.Address;
$get(
"
results
"
).style.display
=
'
block
'
;
}
//
初始化操作,绑定到input元素("加载数据")的click事件上,详情参见aspx文件
function
Init(obj)
{
//
绑定上面的js函数到silverlight的事件handler
$get(
"
Xaml1
"
).content.employeeObject.SELEctemployeeInfo
=
ShowSELEctemployeeInfo;
//
加载雇员信息
$get(
"
Xaml1
"
).content.Page.LoadData(parseInt(obj.titlE));
}
<
/
script>
另外在进行初始化操作,这里使用了onclick方法来执行操作,而不是直接运行相应代码.原因是
silverlight对象加载是使用了异步方式,这样会造成对象实例化完成时间迟于页面JS脚本的运行时间.
这样设计的原因,我个人认为主要是UE方面的考虑.而这时如果脚本中直接调用对象实例化的属性或
方法时,会出现对象未知的情况.
好了,今天的内容就到这里了.
源码下载链接,请点击这里:)
大佬总结
以上是大佬教程为你收集整理的silverlight与javascript交互操作全部内容,希望文章能够帮你解决silverlight与javascript交互操作所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。