System.Collections.ObjectModel.ObservableCollection`1错误

时间:2012-10-02 02:25:17

标签: c# wcf portable-class-library

我在便携式库中使用ObservableCollection但我收到以下错误。我该如何解决这个问题?

  

'System.Collections.ObjectModel.ObservableCollection 1<MyClass>' does not contain a definition for 'Add' and no extension method 'Add' accepting a first argument of type 'System.Collections.ObjectModel.ObservableCollection 1'可以   找到(你错过了使用指令或程序集   引用?)

编辑: 我在便携式库中有这个类

Class A
{

public ObservableCollection<MyClass> MyList { get;set;}

}

并尝试在WCF服务中使用它。

myA.MyList.Add(new MyClass());

第二次编辑: 我通过将具有observable集合属性的类放到不同的项目/库中来解决这个问题。但我仍然想知道为什么我会遇到这个奇怪的错误。

此问题的另一个解决方案是为我的项目提供更好的解决方案结构。我还在努力管理它。

我正在设计一个使用WCF服务的Silverlight项目。我有一些共同的类可以在Silverlight和WCF服务中共享。我只能通过使用一个可移植的类并共享来使它工作,因为我需要使用一些数据结构,如ObservableCollection和SortedList等。便携式类没有这个。由于这个原因,我在不同的库中有Surrogate类,但这看起来不太好。 我该如何设计呢?

1 个答案:

答案 0 :(得分:1)

此错误听起来就像您尝试将ObservableCollection类型的项目添加到由ObservableCollection对象列表组成的现有MyClass中,例如:

ObservableCollection<object> miscList = new ObservableCollection<object>();
ObservableCollection<MyClass> realList = new ObservableCollection<MyClass>();
realList.Add(miscList); // miscList isn't a "MyClass" object =[

尝试检查抛出错误的行,并确保传入正确的变量(可能是拼写错误)。

<强>更新
您的代码示例确认了这种情况。您将列表定义为ObservableCollection<MyClass>,这意味着插入此列表的任何对象都MyClass的实例或从 > MyClass

在以下行中,您尝试将A类型的对象添加到列表中,A既不是MyClass也不是从MyClass继承:

myA.MyList.Add(new A());

要解决此问题,您需要让班级A继承MyClassclass A implements MyClass),将列表更改为ObservableCollection<A>,或者重新考虑原因你需要在该列表中添加一个类型A(也许你需要两个列表?)。