将对象的ObservableCollection分配给作为接口的ObservableCollection的字段

时间:2017-07-22 00:51:37

标签: c# oop inheritance interface uwp

我目前正在尝试将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>


是否有正确的方法在课程之间实现这种理想的结果?

1 个答案:

答案 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> { }