在Silverlight中,绑定来自WCF的对象集合的好模式是什么?

在Silverlight中,绑定来自WCF的对象集合的好模式是什么?,wcf,silverlight,data-binding,observablecollection,Wcf,Silverlight,Data Binding,Observablecollection,我有一个关于Silverlight WCF数据绑定模式的问题: 关于如何在XAML中使用{Binding}表达式绑定数据、如何对WCF服务进行异步调用、在UI中设置元素的DataContext属性、如何使用ObservableCollections和INotifyPropertyChanged、INotifyCollectionChanged等等,有许多示例 背景: 我使用的是MVVM模式,有一个Silverlight ItemsControl,它的ItemsSource被设置为ViewMode

我有一个关于Silverlight WCF数据绑定模式的问题:

关于如何在XAML中使用{Binding}表达式绑定数据、如何对WCF服务进行异步调用、在UI中设置元素的DataContext属性、如何使用ObservableCollections和INotifyPropertyChanged、INotifyCollectionChanged等等,有许多示例

背景: 我使用的是MVVM模式,有一个Silverlight ItemsControl,它的ItemsSource被设置为ViewModel对象上的ObservableCollection属性。我的观点当然是具有{Binding}的XAML。假设模型对象称为“度量”。我的ViewModel定期调用返回ObservableCollection的WCF服务。MetricInfo是数据传输对象(DTO)

我的问题有两个方面:

  • 有没有办法避免将MetricInfo的每个属性复制到模型类-Metric
  • 当WCF调用完成时,是否有任何方法可以确保我同步本地ObservableCollection和WCF调用结果中的项目,而不必首先清除本地集合中的所有项目,然后添加WCF调用结果中的所有项目
  • 谢谢, 奎师那(Krishna)我已经通过这样一个构造器完成了映射:

    public Metric(MetricInfo metricInfoDTO)
    
    然后将属性从DTO映射到实体,这当然是您试图避免的。是的,这是一个小的工作,但对我来说,它已经工作得很好。另一种方法是使用对象映射器,如


    2) 我想您可以使用某种比较逻辑来对集合进行更新和插入。对我来说,我已经做了你在问题中描述的清楚和补充。它很简单,很短,我没有任何问题。

    谢谢Dave。我确实按照一些逻辑对本地集合进行了更新/插入。不过我希望避免这种情况。查看web上的所有示例—您可能会认为这太简单了—但最终,对于现实世界的场景,尽管Silverlight/WPF中有一个很好的数据绑定框架,但我们最终还是做了很多工作。