博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Silverlight+WCF 新手实例 象棋 主界面-棋谱-获取列表(三十八)
阅读量:7250 次
发布时间:2019-06-29

本文共 2260 字,大约阅读时间需要 7 分钟。

在线演示地址:

 

在中,我们完成下棋双方的棋谱显示,这节,我们为观众增加棋子列表:

观众进入房间后,第一时间当然也要获取棋步列表了,不然进来干麻呢?你当这是聊天室啊,光聊天不看棋。

 

首先,当然是要在服务端添加一个获取棋步列表的接口方法了:

WCF服务端,IService.cs:

ExpandedBlockStart.gif
 
///
 
<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:

ExpandedBlockStart.gif
 
public
 
class
 Service : IService
    {
        
//
...省略N行代码...
        
public
 List
<
MoveStep
>
 GetMoveStepList(
int
 roomID)
        {
            
return
 roomList[roomID].StepList;
        }
    }

 

看,每次我们服务端代码都很简短,就一行。

服务端轻松轻松写完了,我们编绎一下,更新服务引用。

 

跟着我们回到客户端ChessManual.xaml.cs,在页面加载时,我们要调用获取一下列表:

整个页面代码不多,就全复制了:

ExpandedBlockStart.gif
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的提示截出来了:

 

于是,我们重新回到棋谱区,继续完成我们的代码:

ExpandedBlockStart.gif
void
 client_GetMoveStepListCompleted(
object
 sender, GameService.GetMoveStepListCompletedEventArgs e)
        {
            
//
获取完棋谱后,这里循环调用添加就可以了
            
if
 (e.Result 
!=
 
null
 
&&
 e.Result.Count 
>
 
0
)
            {
                
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

你可能感兴趣的文章
大白话Vue源码系列(02):编译器初探
查看>>
[Sdoi2016]平凡的骰子
查看>>
mysql定义游标
查看>>
两个有序数组合并算法
查看>>
面向对象设计原则之五:迪米特法则
查看>>
GitHub for Windows简单使用
查看>>
c#操作XML
查看>>
作为一个测试leader平时应该注意哪些方面
查看>>
【DOM编程艺术】Ajax(Hijax)
查看>>
微信公众平台开发(十) 消息回复总结——用其xml模板
查看>>
iOS.CM5.CM4.CM2
查看>>
菜鸟学T-SQL---------SQL2005读书笔记1
查看>>
Python--函数(全局变量和局部变量)
查看>>
PLSQL Developer 不能连接 oracle 11g 64位 的解决办法
查看>>
byobu相关操作
查看>>
父页面操作嵌套iframe子页面的HTML标签元素
查看>>
在TSQL中用case,when之类同时查多种情况
查看>>
Math,random()返回区间内的随机数
查看>>
TCP/IP网络协议的通俗理解,socket,http,soap
查看>>
简单数论
查看>>