• Silverlight+WCF 新手实例 象棋 主界面棋谱获取列表(三十八)


    在线演示地址: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,观众进来的时候有棋谱了,可是观众人棋盘还是初始状态的呢??

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

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

    版权声明:本文原创发表于 博客园,作者为 路过秋天 本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。
    个人微信公众号
    创业QQ群:617713515
    Donation(扫码支持作者):支付宝:
    Donation(扫码支持作者):微信:
  • 相关阅读:
    windows 内存泄露和资源泄漏调试
    window驱动
    Direct2D教程(七)单色画刷
    Direct2D教程(三)简单几何图形
    求反射向量
    Visual Studio 2012中使用自定义project properties
    View Transform(视图变换)详解
    八进制字符与十六进制字符
    Direct2D教程(四)Path Geometry
    C++默认构造函数
  • 原文地址:https://www.cnblogs.com/cyq1162/p/1795583.html
Copyright © 2020-2023  润新知