Silverlight+WCF 新手实例 象棋 主界面-棋谱-获取列表(三十八)
2012-03-09 00:00
330 查看
在线演示地址:Silverlight+WCF 新手实例 象棋 在线演示
在Silverlight+WCF 新手实例 象棋 主界面-棋谱-布局写谱(三十六)中,我们完成下棋双方的棋谱显示,这节,我们为观众增加棋子列表:
观众进入房间后,第一时间当然也要获取棋步列表了,不然进来干麻呢?你当这是聊天室啊,光聊天不看棋。
首先,当然是要在服务端添加一个获取棋步列表的接口方法了:
WCF服务端,IService.cs:
///
<summary>
///
服务端方法接口 by 路过秋天
///
</summary>
[ServiceContract(CallbackContract
=
typeof
(ICallBack))]
public
interface
IService
{
//
...省略N行代码...
[OperationContract]
System.Collections.Generic.List
<
MoveStep
>
GetMoveStepList(
int
roomID);
//
获取棋步列表
//
...省略N行代码...
}
我们返回的是一个泛型的List,这个得注意了。
接着我们来实现这个方法,回到IService.svc.cs:
public
class
Service : IService
{
//
...省略N行代码...
public
List
<
MoveStep
>
GetMoveStepList(
int
roomID)
{
return
roomList[roomID].StepList;
}
}
看,每次我们服务端代码都很简短,就一行。
服务端轻松轻松写完了,我们编绎一下,更新服务引用。
跟着我们回到客户端ChessManual.xaml.cs,在页面加载时,我们要调用获取一下列表:
整个页面代码不多,就全复制了:
public
partial
class
ChessManual : UserControl
{
public
ChessManual()
{
InitializeComponent();
App.client.GetMoveStepListCompleted
+=
new
EventHandler
<
GameService.GetMoveStepListCompletedEventArgs
>
(client_GetMoveStepListCompleted);
App.client.GetMoveStepListAsync(App.player.RoomID);
}
void
client_GetMoveStepListCompleted(
object
sender, GameService.GetMoveStepListCompletedEventArgs e)
{
//
获取完棋谱后,这里循环调用Add就可以了
}
public
void
Add(GameService.MoveStep step)
{
lbChessManual.Items.Add(step.ID
+
"
:
"
+
step.Name);
lbChessManual.SelectedIndex
=
lbChessManual.Items.Count
-
1
;
lbChessManual.UpdateLayout();
lbChessManual.ScrollIntoView(lbChessManual.SelectedItem);
}
}
接着我们要实现把获取到的列表Add到棋谱区去了,可是,这个时候我们发现一个问题,上图:
看到Result出来的提示没有,我们返回的是一个List,结果返回了个System.Collections.ObjectModel.ObservableCollection
这是咋回事呢?我们一直返回Dictionary都好好的,咋返回个List就成这个样子了,大伙摸急,方法是有的:我们看下图说:
1:对着引用的GameService右键:
2:我们选中配置服务引用:
3:从上图我们看到了集合类型,默认是那个ObservableCollection了的,于是我们选一下下拉框看看:
看到了有List了吧,选中它,确定,系统会自动重新更新引用,就OK了,不另外截图把e.Result的提示截出来了:
于是,我们重新回到棋谱区,继续完成我们的代码:
void
client_GetMoveStepListCompleted(
object
sender, GameService.GetMoveStepListCompletedEventArgs e)
{
//
获取完棋谱后,这里循环调用添加就可以了
if
(e.Result
!=
null
&&
e.Result.Count
>
)
{
foreach
(GameService.MoveStep step
in
e.Result)
{
lbChessManual.Items.Add(step.ID
+
"
:
"
+
step.Name);
}
}
}
OK,到此,观众就可以获取到棋步列表了。我们F5运行看下效果:
OK,观众进来的时候有棋谱了,可是观众人棋盘还是初始状态的呢??
这个嘛,我们只要把棋谱从头到尾播放一次,状态自然就跟下棋者的一样了;
我们留到下节解说,本节就点到为止了。
原文链接:
http://www.cnblogs.com/cyq1162/archive/2010/08/09/1795583.html
在Silverlight+WCF 新手实例 象棋 主界面-棋谱-布局写谱(三十六)中,我们完成下棋双方的棋谱显示,这节,我们为观众增加棋子列表:
观众进入房间后,第一时间当然也要获取棋步列表了,不然进来干麻呢?你当这是聊天室啊,光聊天不看棋。
首先,当然是要在服务端添加一个获取棋步列表的接口方法了:
WCF服务端,IService.cs:
///
<summary>
///
服务端方法接口 by 路过秋天
///
</summary>
[ServiceContract(CallbackContract
=
typeof
(ICallBack))]
public
interface
IService
{
//
...省略N行代码...
[OperationContract]
System.Collections.Generic.List
<
MoveStep
>
GetMoveStepList(
int
roomID);
//
获取棋步列表
//
...省略N行代码...
}
我们返回的是一个泛型的List,这个得注意了。
接着我们来实现这个方法,回到IService.svc.cs:
public
class
Service : IService
{
//
...省略N行代码...
public
List
<
MoveStep
>
GetMoveStepList(
int
roomID)
{
return
roomList[roomID].StepList;
}
}
看,每次我们服务端代码都很简短,就一行。
服务端轻松轻松写完了,我们编绎一下,更新服务引用。
跟着我们回到客户端ChessManual.xaml.cs,在页面加载时,我们要调用获取一下列表:
整个页面代码不多,就全复制了:
public
partial
class
ChessManual : UserControl
{
public
ChessManual()
{
InitializeComponent();
App.client.GetMoveStepListCompleted
+=
new
EventHandler
<
GameService.GetMoveStepListCompletedEventArgs
>
(client_GetMoveStepListCompleted);
App.client.GetMoveStepListAsync(App.player.RoomID);
}
void
client_GetMoveStepListCompleted(
object
sender, GameService.GetMoveStepListCompletedEventArgs e)
{
//
获取完棋谱后,这里循环调用Add就可以了
}
public
void
Add(GameService.MoveStep step)
{
lbChessManual.Items.Add(step.ID
+
"
:
"
+
step.Name);
lbChessManual.SelectedIndex
=
lbChessManual.Items.Count
-
1
;
lbChessManual.UpdateLayout();
lbChessManual.ScrollIntoView(lbChessManual.SelectedItem);
}
}
接着我们要实现把获取到的列表Add到棋谱区去了,可是,这个时候我们发现一个问题,上图:
看到Result出来的提示没有,我们返回的是一个List,结果返回了个System.Collections.ObjectModel.ObservableCollection
这是咋回事呢?我们一直返回Dictionary都好好的,咋返回个List就成这个样子了,大伙摸急,方法是有的:我们看下图说:
1:对着引用的GameService右键:
2:我们选中配置服务引用:
3:从上图我们看到了集合类型,默认是那个ObservableCollection了的,于是我们选一下下拉框看看:
看到了有List了吧,选中它,确定,系统会自动重新更新引用,就OK了,不另外截图把e.Result的提示截出来了:
于是,我们重新回到棋谱区,继续完成我们的代码:
void
client_GetMoveStepListCompleted(
object
sender, GameService.GetMoveStepListCompletedEventArgs e)
{
//
获取完棋谱后,这里循环调用添加就可以了
if
(e.Result
!=
null
&&
e.Result.Count
>
)
{
foreach
(GameService.MoveStep step
in
e.Result)
{
lbChessManual.Items.Add(step.ID
+
"
:
"
+
step.Name);
}
}
}
OK,到此,观众就可以获取到棋步列表了。我们F5运行看下效果:
OK,观众进来的时候有棋谱了,可是观众人棋盘还是初始状态的呢??
这个嘛,我们只要把棋谱从头到尾播放一次,状态自然就跟下棋者的一样了;
我们留到下节解说,本节就点到为止了。
原文链接:
http://www.cnblogs.com/cyq1162/archive/2010/08/09/1795583.html
相关文章推荐
- Silverlight+WCF 新手实例 象棋 主界面-棋谱-获取列表(三十八)
- Silverlight+WCF 新手实例 象棋 主界面-棋谱-获取列表(三十八)
- Silverlight+WCF 新手实例 象棋 主界面-棋谱-获取列表(三十八)
- 一起谈.NET技术,Silverlight+WCF 新手实例 象棋 主界面-棋谱-回放-结局(四十)
- Silverlight+WCF 新手实例 象棋 获取房间状态列表更新(二十一)
- Silverlight+WCF 新手实例 象棋 主界面-棋谱-布局写谱(三十六)
- Silverlight+WCF 新手实例 象棋 主界面-棋谱-回放-结局(四十)
- Silverlight+WCF 新手实例 象棋 主界面-棋谱-回放-结局(四十)
- Silverlight+WCF 新手实例 象棋 获取房间状态列表更新(二十一)
- Silverlight+WCF 新手实例 象棋 获取房间状态列表更新(二十一)
- Silverlight+WCF 新手实例 象棋 主界面-棋谱-布局写谱(三十六)
- Silverlight+WCF 新手实例 象棋 主界面-棋谱-回放(三十九)
- Silverlight+WCF 新手实例 象棋 主界面-棋谱-回放-结局(四十)
- Silverlight+WCF 新手实例 象棋 主界面-棋谱-布局写谱(三十六)
- Silverlight+WCF 新手实例 象棋 主界面-棋谱-回放(三十九)
- Silverlight+WCF 新手实例 象棋 获取房间状态列表更新(二十一)
- Silverlight+WCF 新手实例 象棋 主界面-棋谱-回放(三十九)
- Silverlight+WCF 新手实例 象棋 主界面-棋谱-布局写谱(三十六)
- Silverlight+WCF 新手实例 象棋 主界面-棋谱-回放-结局(四十)
- Silverlight+WCF 新手实例 象棋 主界面-棋谱-回放(三十九)