2017-07-22 17 views
1

我正在嘗試將對象的ObservableCollection(在下面的示例中爲ObservableCollection<A>)分配給父類中的字段,該字段是由該對象實現的接口的ObservableCollection(在下面的示例中:public ObservableCollection<IOrderable> childModels,其中類型A實現了IOrderable)。

這可以看出以下幾點:
將對象的ObservableCollection分配給作爲接口的ObservableCollection的字段

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; 
    } 
} 

的問題是,this.childModels = t.aCollection;this.childModels = y.bCollection;都沒有工作,而不是給出錯誤「無法隱式類型ObservableCollection<A>轉換爲ObservableCollection<IOrderable>」和「不能隱式轉換類型ObservableCollection<B>ObservableCollection<IOrderable>


是否有正確的交流方式在這些課程之間獲得期望的結果?

回答

2

你可以使你的InfoListViewModelBase通用。

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

你實現成爲

public class TermViewModel : InfoListViewModelBase<A> { } 

public class YearViewModel : InfoListViewModelBase<B> { } 
相關問題