silverlight   发布时间:2022-05-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Silverlight Wcf 获取集合数据并绑定(DataContract,DataMember)大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

在之前写的一篇文章中,提到当在WCF中创建一个类,SL中引用该WCF服务后该类会变成 XXClient的样子,当初初学(现在也是,不过要好一点点),对Wcf服务和Sl之间的关系看得比较片面。其实在Wcf中创建serviceContract契约标注的类的时候才会在Sl中变成XXClient的形式的类,而还有一种创建Wcf类的契约指定DataContract,这个契约的用途主要是制订一个类的数据结构,

在之前写的一篇文章中,提到当在WCF中创建一个类,SL中引用该WCF服务后该类会变成 XXClient的样子,当初初学(现在也是,不过要好一点点),对Wcf服务和Sl之间的关系看得比较片面。其实在Wcf中创建serviceContract契约标注的类的时候才会在Sl中变成XXClient的形式的类,而还有一种创建Wcf类的契约指定DataContract,这个契约的用途主要是制订一个类的数据结构,提供给引用其服务的客户端共享类型。

 

在通过wcf将一个数据集合传递给Sl的时候,我们会发现,异步完成事件的参数e的Result获得的数据集合是System.Collections.ObjectModel.observableCollection泛型的,如果,我们的wcf中返回的是一个DataView,那么在Sl中绑定这个结果是会出错的,因为Sl中并没提供DataView类,那怎么办呢?

 

于是,我们就会想自己写一个数据集合类来返回给SL,那么SL那边是不是也要写个相同的类来接收?Sl的数据绑定是可以通过绑定类的属性来实现的,但是,wcf上定义的类如何让Sl知道就是和他自己定义的类是一样的??

我们是写的一样的,可是SL不这么认为,就算一模一样,他们依然是两个类,不可共用的,也不存在继承关系。

 

于是,在创建wcf就得用DataContract定义一个类型出来,这样定义之后,sl上就可以共享这个类了,这个服务被sl引用后,这个类就跟sl自己的一样,sl和wcf签订了一个契约,我们都用这个类吧。这时,问题就解决了。

 

我们获取一个数据集合,比如说DataView ,然后将这个集合中的每一项的每一个字段作为属性赋值给那个DataContract指定的类的实例,有多少项就得创建多少个这个类的实例,然后创建一个List泛型来存储这一堆的实例。之后我们就将List泛型返回给SL,Sl获得这个List集合后,一看,泛型指定的是DataContract定义的类,正是wcf契订的那个类,sl引用了这个服务,当然也就共享了这个类,这个类也是sl自己的,好,sl然获得的依然是System.Collections.ObjectModel.observableCollection泛型,但是泛型里的类型是它所了解的那个类,那么就可以直接将结果绑定到类似DataGrid的控件上了。

 

 DataContract标注这个类的时候,其要勇于共享的字段或属性需要用DataMember标注,就像serviceContract标注的类里的要共享的方法需要用OperationContract标注一样。

 

很困了,随便写,改天有空整理,白话讲出来也就这个意思。

 

另外,Sl中 DataGrid绑定数据时,实际上是绑定一个由N个类实例组合的集合,该集合的每一项就是一个类实例,DataGird绑定这个集合的时候,每一行是一项,每一行的每一列是该项的类的每一个属性。也就是说,一行就是一个类实例,一列就是一个实例的一个属性

 

 

太困了

贴点代码

 

wcf

 

using System;

using System.Linq;

using System.Runtime.serialization;

using System.serviceModel;

using System.serviceModel.Activation;

using System.Collections.Generic;

using System.Text;

using System.Data;

 

namespace QiWeiXian

{

    [serviceContract(Namespace = "Qiweixian.com")]

    [AspNetCompatibilityrequirements(requirementsMode = AspNetCompatibilityrequirementsMode.Allowed)]

    public class WebWcf

    {

        [OperationContract]

        public List<BookItem> GetBookList()

        {

            DataView dv = new DataView();

 

            DataClass dc = new DataClass();

 

            dv = dc.GetBooks(datetiR_937_11845@e.Now.Date,datetiR_937_11845@e.Now.Date.AddDays(1));

 

            dv.sort = "ID Desc";

 

            List<BookItem> list = new List<BookItem>();

 

            BookItem bi;

 

            for (int i = 0; i < dv.Count; i++)

            {

                bi = new BookItem();

 

                bi.ID = (int)dv[i]["ID"];

                bi.Name = dv[i]["Name"].ToString();

                bi.Peoples = (int)dv[i]["Peoples"];

                bi.Phone = dv[i]["Phone"].ToString();

                bi.REMARK = dv[i]["REMARK"].ToString();

                bi.REMARK2 = dv[i]["REMARK2"].ToString();

                bi.Status = (int)dv[i]["Status"];

                bi.AddTime = (datetiR_937_11845@e)dv[i]["AddTime"];

                bi.bookTime = (datetiR_937_11845@e)dv[i]["BookTime"];

 

                list.Add(bi);

            }

 

            return list;

        }

 

    }

 

    [DataContract]

    public class BookItem

    {

        [DataMember]

        public int ID;

        [DataMember]

        public String Name;

        [DataMember]

        public datetiR_937_11845@e BookTime;

        [DataMember]

        public int Peoples;

        [DataMember]

        public datetiR_937_11845@e AddTime;

        [DataMember]

        public String Phone;

        [DataMember]

        public String REMARK;

        [DataMember]

        public String REMARK2;

        [DataMember]

        public int Status;

    }

   

}

 

 

 

 

 

 

 

 

sl  cs

 

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Net;

using System.Windows;

using System.Windows.Controls;

using System.Windows.Documents;

using System.Windows.Input;

using System.Windows.Media;

using System.Windows.Media.Animation;

using System.Windows.Shapes;

using System.Windows.Data;

 

 

namespace BookOnline

{

    public partial class Page : UserControl

    {

        public Page()

        {

            InitializeComponent();

           

        }

 

        private void UserControl_Loaded(object sender,RoutedEventArgs E)

        {

            BookListBind();

        }

 

        public void BookListBind()

        {

            WebWcf.WebWcfClient wc = new BookOnline.WebWcf.WebWcfClient();

 

          

            wc.GetBookListAsync();

 

            wc.GetBookListCompleted += new EventHandler<BookOnline.WebWcf.GetBookListCompletedEventArgs>(wc_GetBookListCompleted);

        }

 

       

 

        void wc_GetBookListCompleted(object sender,BookOnline.WebWcf.GetBookListCompletedEventArgs E)

        {

            System.Collections.ObjectModel.ObservableCollection<BookOnline.WebWcf.BookItem> members = e.Result;

 

            BookList.Itemssource = members;

           

        }

 

    }

 

}

大佬总结

以上是大佬教程为你收集整理的Silverlight Wcf 获取集合数据并绑定(DataContract,DataMember)全部内容,希望文章能够帮你解决Silverlight Wcf 获取集合数据并绑定(DataContract,DataMember)所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。