2009-08-14 185 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