【问题标题】:WCF returns empty custom collection typeWCF 返回空的自定义集合类型
【发布时间】:2015-07-15 11:33:44
【问题描述】:

如您所知,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 只引发一次事件。

【问题讨论】:

  • 你为什么不为基类库类型ObservableCollection添加一个AddRange扩展方法?对我来说,这似乎更容易。
  • @Martin,当然我们已经尝试过了,但问题是它会为每个元素引发集合更改通知,因此我们的 silverlight 应用程序在大型集合上简直是死了。这就是为什么我们使用子类化只引发一次事件
  • 好的,现在听起来很合理。

标签: c# wcf silverlight observablecollection


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-23
    • 2021-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多