2009-08-14 10 views
2

J'ai un problème avec la classe ObservableCollection. Je ne peux pas résoudre cela.Impossible de résoudre le symbole 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 

Ma classe avec le ObservableCollection hérite 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)); 
     } 
    } 
    } 

une idée, où est le problème?

Répondre

2

T est juste un espace réservé. Vous devez fournir un type réel quelque part pour T.

E.g. Si vous avez List<T>, vous pouvez créer un List<int> ou List<string> (T est un autre type qui correspond aux contraintes données). C'est à dire. T est int dans le premier cas et string dans le second.

+0

J'ai 2 types différents ce que j'ajoute cette collection voir: http://msdn.microsoft.com/en-us/library/ms668604.aspx –

+0

Vous avez encore besoin de remplacer T par un type spécifique. Si vos différents types ont une classe de base commune, vous pouvez l'utiliser pour T. Si ce n'est pas le cas, vous pouvez utiliser un objet, mais dans ce cas, vous pouvez envisager de modifier votre conception. –

-1

Comme indiqué précédemment, T est un espace réservé. Vous voulez sans doute quelque chose comme:

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

Cet extrait est manifestement faux;). Je suppose que vous voulez changer le premier T aussi. – Dykam

0

Je pense qu'il deviendra clair pour vous lorsque vous lisez un peu sur Generics

Vous pouvez le faire comme ceci:

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

Ensuite, vous avez une collection typée qui sera capable de stocker des instances de la classe Customer (et aussi des instances de sous-classes qui héritent du client). Donc, si vous voulez avoir une collection où vous voulez pouvoir ajouter des instances de plusieurs types, vous pouvez créer une classe de base (ou une interface), hériter de cette classe de base ou implémenter cette interface, et créer une Instance observableCollection pour ex.

+0

J'ai un client de base et deux classes (PrivateCustomer et CorporateCustomer) héritent du client. Maintenant, je voudrais que n'importe quel objet Sous-classes en ajoutant dans une seule ObservableCollection là se lier à un DataGrid. –

Questions connexes