我目前正在尝试将ObservableCollection
对象(在下面的示例中为ObservableCollection<A>
)分配给父类的字段,该字段是接口的ObservableCollection
由对象实现(在下面的示例中:public ObservableCollection<IOrderable> childModels
,其中类型A
实现IOrderable
)。
这可以在以下内容中看到:
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>
“
是否有正确的方法在课程之间实现这种理想的结果?
答案 0 :(得分: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> { }