2017-07-22 1 views
1

Ich versuche derzeit, ein ObservableCollection eines Objekts (im folgenden Beispiel: ObservableCollection<A>) einem Feld in einer übergeordneten Klasse zuzuweisen, die ein ObservableCollection einer Schnittstelle implementiert durch das Objekt (im Beispiel unten: public ObservableCollection<IOrderable> childModels, wo A implementiert IOrderable).

Dies kann im folgenden zu sehen:
Zuweisen einer ObservableCollection eines Objekts zu einem Feld, das eine ObservableCollection einer Schnittstelle ist

public class A : IOrderable { } 

public class B : IOrderable { } 

public class Term 
{ 
    public ObservableCollection<A> aCollection { get; set; } 
} 

public class Year 
{ 
    public ObservableCollection<B> bCollection { get; set; } 
} 

public abstract class InfoListViewModelBase : ViewModelBase 
{ 
    public ObservableCollection<IOrderable> childModels { get; set; }  
} 

public class TermViewModel : InfoListViewModelBase 
{ 
    public TermViewModel(Term t) 
    { 
    this.childModels = t.aCollection; 
    } 
} 

public class YearViewModel : InfoListViewModelBase 
{ 
    public TermViewModel(Year y) 
    { 
    this.childModels = y.bCollection; 
    } 
} 

Das Problem ist, dass this.childModels = t.aCollection; und this.childModels = y.bCollection; beide nicht funktionieren, anstatt die Fehler "umwandeln können nicht implizit Typen ObservableCollection<A> zu ObservableCollection<IOrderable>" geben und „Can not implizit Typ umwandeln ObservableCollection<B> zu ObservableCollection<IOrderable> "


gibt es eine richtige Art zu ac Dieses gewünschte Ergebnis zwischen den Klassen finden?

Antwort

2

Sie könnten Ihre InfoListViewModelBase generisch machen.

public abstract class InfoListViewModelBase<T> : ViewModelBase where T:IOrderable 
{ 
    public ObservableCollection<T> childModels { get; set; }  
} 

Ihre Implementierungen werden

public class TermViewModel : InfoListViewModelBase<A> { } 

public class YearViewModel : InfoListViewModelBase<B> { } 
Verwandte Themen