WCF返回空的自定义集合类型

时间:2015-05-05 16:02:42

标签: c# wcf silverlight observablecollection

如您所知ObservableCollection没有AddRange扩展方法。所以我们添加了自定义集合,该集合源自ObservableCollection

[CollectionDataContract]
public class CustomObservableCollection<T> : ObservableCollection<T>
{
    public CustomObservableCollection()
        : base()
    {
    }

    public CustomObservableCollection(IEnumerable<T> collection)
        : base(collection)
    {
    }

    public CustomObservableCollection(List<T> list)
        : base(list)
    {
    }

    public void AddRange(IEnumerable<T> range)
    {
        foreach (var item in range)
        {
            Items.Add(item);
        }

        this.OnPropertyChanged(new PropertyChangedEventArgs("Count"));
        this.OnPropertyChanged(new PropertyChangedEventArgs("Item[]"));
        this.OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset));
    }

    public void Reset(IEnumerable<T> range)
    {
        this.Items.Clear();

        AddRange(range);
    }
}

服务引用的默认集合类型为ObservableCollection。这意味着当您添加服务引用时,您会在客户端看到ObservableCollection的结果。我们通过修改Reference.svcmap文件来改变了这一点:

<CollectionMappings>
  <CollectionMapping TypeName="BusinessModel.Common.CustomObservableCollection`1" Category="List" />
</CollectionMappings>

现在我可以看到我的服务正在向客户端返回CustomObservableCollection

但问题是它返回空集合。我知道在服务返回之前自定义集合中有数据,但我的silverlight客户端收到空集。有没有人知道可能是什么问题?

我们尝试添加扩展,但问题是扩展方法会为每个元素引发集合更改通知,因此我们的silverlight应用程序只会在大型集合上死亡。这就是我们使用subclassing仅举起一次事件的原因。

1 个答案:

答案 0 :(得分:0)

我已从课程中删除了属性[CollectionDataContract],现在一切正常。