2019独角兽企业重金招聘Python工程师标准>>>

在线演示地址: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  >   0 )
            {
                 foreach  (GameService.MoveStep step  in  e.Result)
                {
                    lbChessManual.Items.Add(step.ID  +   " : "   +  step.Name);
                }
            }
        }

OK,到此,观众就可以获取到棋步列表了。我们F5运行看下效果:

OK,观众进来的时候有棋谱了,可是观众人棋盘还是初始状态的呢??

这个嘛,我们只要把棋谱从头到尾播放一次,状态自然就跟下棋者的一样了;

我们留到下节解说,本节就点到为止了。

转载于:https://my.oschina.net/secyaher/blog/274360

Silverlight+WCF 新手实例 象棋 主界面-棋谱-获取列表(三十八)相关推荐

  1. Silverlight+WCF 新手实例 象棋 主界面-棋谱-回放-结局(四十)

    在线演示地址: Silverlight+WCF 新手实例 象棋 在线演示 在Silverlight+WCF 新手实例 象棋 主界面-棋谱-回放(三十九)中,我们实现了用户的棋谱回放,在文章的下面,我们 ...

  2. Silverlight+WCF 新手实例 象棋 主界面-棋谱-回放(三十九)

    在线演示地址:Silverlight+WCF 新手实例 象棋 在线演示 本节完后,同时会更新Silverlight+WCF 新手实例 象棋 专题索引,并顺路提供第八阶段源码 在Silverlight+ ...

  3. Silverlight+WCF 新手实例 象棋 主界面-实时聊天区(二十五)

    在线演示地址:Silverlight+WCF 新手实例 象棋 在线演示 演示已更新到此节介绍:Silverlight+WCF 新手实例 象棋 介绍III(二十三) 本节连着Silverlight+WC ...

  4. Silverlight+WCF 新手实例 象棋 主界面-事件区-求和认输(三十二)

    在线演示地址:Silverlight+WCF 新手实例 象棋 在线演示 事隔几篇,我们又回到事件区,继续其它两个按钮事件,来张图吧: 在Silverlight+WCF 新手实例 象棋 主界面-事件区- ...

  5. Silverlight+WCF 新手实例 象棋 主界面-事件区-返回退出(三十三)

    在线演示地址:Silverlight+WCF 新手实例 象棋 在线演示 还是那张图: 本节实现返回大厅和退出系统: 一:返回大厅,其实很简单的说,就是转向房间列表了. 可是,转向前也有很多事情要处理的 ...

  6. Silverlight+WCF 新手实例 象棋 该谁下棋-B下A停(三十)

    2019独角兽企业重金招聘Python工程师标准>>> 在线演示地址:Silverlight+WCF 新手实例 象棋 在线演示 上上一节,就是二十八节:Silverlight+WCF ...

  7. Silverlight+WCF 新手实例 象棋 棋子移动-规则[附加上半盘限制](十)

    上上一节,我们对棋子的下半盘棋子做了所有的规则限制,因为我们下棋的总是用下半盘的棋子来下,总没人用上半盘棋来下那么高境界的吧. 不过这节简单追加点代码,让那些企图高境界的人士可以临时性的自己和自己下. ...

  8. Silverlight+WCF 新手实例 象棋 棋盘(二)

    2019独角兽企业重金招聘Python工程师标准>>> 1.先新建一个和棋子相关的类库 打开VS2010后->新建->项目->Silverlight类库,名称就定为 ...

  9. Silverlight+WCF 新手实例 象棋 棋子(三)

    2019独角兽企业重金招聘Python工程师标准>>> 棋盘上有棋子,棋子应该还有一些属性,按原始冲动新建一个棋子类. 上google翻译下棋子E文叫什么,查到了叫Chessman, ...

最新文章

  1. 清华大学发布首个自动图机器学习工具包 AutoGL,开源易用可扩展,支持自定义模型...
  2. 利用openssh实现chroot监牢
  3. MySQL快速查询的12条建议,让你不止会用select *
  4. Xshell操控kali-linux虚拟机
  5. SpringMVC的请求-文件上传-客户端表单实现
  6. Confirm的用法!
  7. 2-1 年会抽奖_实现分析
  8. 14英寸电脑长宽多少_华为MateBook 14 2020款 14英寸轻薄笔记本王者升级
  9. 链上合约(On-chain) 和 链下合约(Off-chain) 是什么 区别
  10. java 文件上传终止_java文件上传
  11. 优雅降级实现IE8的transform平移属性
  12. ajax 传参json字符串
  13. Oracle 18c十大新特性
  14. 微软亚洲研究院全球院友线上欢聚,共话新春
  15. Java毕设项目房地产管理系统登录计算机(附源码+系统+数据库+LW)
  16. python里float什么意思_Python中的float是什么意思,小白求答?
  17. linux罗马数字1到10怎么打,罗马数字1到10怎么打
  18. 从特斯拉召回事件,窥探OTA汽车进化真面目
  19. YY客网络广播 内测进行中!
  20. 练习-Java类和对象之对象组合之求圆锥体表面积

热门文章

  1. ubuntu vsftpd虚拟用户配置/ubuntu12.04上搭建vsftpd服务示例linux
  2. 提高C++性能的编程技术笔记:虚函数、返回值优化+测试代码
  3. Shell脚本示例代码
  4. OpenCV中的内存泄漏检测
  5. vc6静态库的生成和调用
  6. word自动消除html标签,清理Word生成HTML的冗余;清理与清除HTML标签
  7. oracle1core,Oracle core06_latchlock
  8. pxe linux 配置文件,Linux PXE 部署
  9. java 写入mysql blob_java 读取写入 mysql blob
  10. 傻瓜式动画制作软件_一个傻瓜版的动画制作软件——万彩动画大师