日期:2014-05-18  浏览次数:21036 次

隐式转换
void client_GetHeatPumpDatasCompleted(object sender, MyChartsService.GetHeatPumpDatasCompletedEventArgs e)
  {
  List<MyChartsService.HeatPump> datas = e.Result;
错误信息:

错误 59 无法将类型“System.Collections.ObjectModel.ObservableCollection<MyCharts.MyChartsService.HeatPump>”
隐式转换为“System.Collections.Generic.List<MyCharts.MyChartsService.HeatPump>”
C:\Users\Administrator\Desktop\DX4.0\MyCharts\HeatPump.xaml.cs 34 52 MyCharts

  }

WCF服务器端:添加了引用“using System.Collections.Generic;”

Silverlight客户端:添加了引用“using System.Collections.Generic;”

问题一:为什么提示“无法进行类型转换”呢?引用都添加了啊。

问题二:“System.Collections.ObjectModel.ObservableCollection”和“System.Collections.Generic.List”有什么不同?又有什么联系?

问题三:没有添加“System.Collections.ObjectModel.ObservableCollection”的引用啊,哪里来的?

------解决方案--------------------
那估计是2种完全不同的类型,你要自己写代码实现转换。
------解决方案--------------------
不能转换就不转了呗。你自己也定义成 ObservableCollection<MyChartsService.HeatPump> datas。或者,你非要用List的话,那就Foreach,挨个吧内容复制到List里。
探讨
ObservableCollection(Of T) 类:
表示一个动态数据集合,在添加项、移除项或刷新整个列表时,此集合将提供通知。


System.Collections.Generic命名空间:
命名空间包含定义泛型集合的接口和类,用户可以使用泛型集合来创建强类型集合,这种集合能提供比非泛型强类型集合更好的类型安全性和性能。

“ObservableCollection”这个……

------解决方案--------------------
你引用System.Collections.Generic,
把List<MyChartsService.HeatPump> datas = e.Result;改成
C# code

[color=#FF0000]List<MyChartsService.HeatPump> datas = e.Result;[/color]

------解决方案--------------------
改成IList<MyChartsService.HeatPump> datas = e.Result;
------解决方案--------------------
第三个问题,e.Result是调用wcf服务后返回的结果集吧,看看你引用的wcf服务的集合类型选择的是不是ObservableCollection,如果是这个你调用返回服务后的集合返回值他会自动转换成这个类型。
第二个问题,ObservableCollection实现了INotifyPropertyChanged接口,如果前台页面绑定的变量是ObservableCollection类型,当后台变量改变时,会自动通知前台去获取变量来更新,而list不会,list需要你自己写通知。
第一个问题,虽然加了引用,但e.Result是ObservableCollection,而你的 List<MyChartsService.HeatPump> datas 是list,类型不一样,当然不错啦。改成ObservableCollection<MyChartsService.HeatPump> datas就行了。
------解决方案--------------------
对了,wcf服务的集合类型,在你项目引用的wcf的右键配置服务引用里面
------解决方案--------------------
问题一,你看一下你项目引用的wcf服务,右键--》配置服务引用--》集合类型,如果你设置的是array,那调用返回的是数组,如果是ObservableCollection,那返回的就是ObservableCollection,这是可以设置的,不是都返回ObservableCollection,这跟你在service里面写的返回值类型没有直接联系,你可以写个wcf服务测试下。
问题二,对,wcf会将你的返回类型转换成你设置的集合类型
问题三,跟实体类没关系,ObservableCollection这个数据类型已经实现了INotifyPropertyChanged接口,所以只要你后台变量是使用ObservableCollection这个数据类型,比如说ObservableCollection<entityclass> itemsource;当itemsource变化时,你前台绑定这个变量的控件就会收到通知,跟你的entityclass是没有关系的。