2009-08-14 183 views
2

我遇到ObservableCollection类的问题。我无法解决这个问题。无法解析符号T

using System.Collections.ObjectModel; 

    #region ViewModelProperty: CustomerList 
    private ObservableCollection<T> _customerList = new ObservableCollection<T>(); 
    public ObservableCollection<T> CustomerList 
    { 
     get 
     { 
     return _customerList; 
     } 

     set 
     { 
     _customerList = value; 
     OnPropertyChanged("CustomerList"); 
     } 
    } 
    #endregion 

我与的ObservableCollection类继承ViewModelBase:

public abstract class ViewModelBase : INotifyPropertyChanged 
    { 
    public event PropertyChangedEventHandler PropertyChanged; 

    protected void OnPropertyChanged(string propertyName) 
    { 
     PropertyChangedEventHandler handler = PropertyChanged; 

     if (handler != null) 
     { 
     handler(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 
    } 

任何想法,问题出在哪里?

回答

2

T只是一个占位符。你需要为T提供一个实际的类型。

E.g.如果您有List<T>,则可以制作List<int>List<string>T是符合给定约束的任何其他类型)。即T在第一种情况下为int,在第二种情况下为string

+0

我有两种不同的类型,我添加此集合请参阅: http://msdn.microsoft.com/en-us/library/ms668604.aspx – 2009-08-14 07:37:23

+0

您仍然需要用特定类型替换T.如果你的不同类型有一个共同的基类,你可以将它用于T.如果它们不是,你可以使用对象,但在这种情况下,你可能想考虑改变你的设计。 – 2009-08-14 07:41:40

-1

如前所述,T是占位符。你可能想是这样的:

private ObservableCollection<T> _customerList = new ObservableCollection <ClassYouWantObserved>(); 
+2

这段代码显然是错误的;)。猜猜你也想改变第一个T。 – Dykam 2009-08-14 07:41:58

0

我认为,当你阅读了关于Generics

一点便清楚你你可以做这样的:

ObservableCollection<Customer> customerList = new ObservableCollection<Customer>() 

然后,你有一个类型化的集合,它将能够存储Customer类的实例(以及从Customer继承的子类的实例)。 因此,如果你想拥有一个你想要添加多种类型实例的集合,你可以创建一个基类(或接口),并从该基类继承或实现这个接口,并创建一个Ex的ObservableCollection实例。

+0

我有一个基类客户有两个类(PrivateCustomer和CorporateCustomer)从客户继承。现在我想让任何Subclasses对象只在一个ObservableCollection中添加绑定到一个DataGrid。 – 2009-08-14 07:51:04