【问题标题】:Assigning an ObservableCollection of an object to a field that is an ObservableCollection of an interface将对象的 ObservableCollection 分配给作为接口的 ObservableCollection 的字段
【发布时间】:2017-07-22 00:51:37
【问题描述】:

我目前正在尝试将对象的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&lt;A&gt; 隐式转换为ObservableCollection&lt;IOrderable&gt;”和“无法将类型ObservableCollection&lt;B&gt; 隐式转换为ObservableCollection&lt;IOrderable&gt;


是否有正确的方法在类之间实现这种预期结果?

【问题讨论】:

    标签: c# oop inheritance interface uwp


    【解决方案1】:

    你可以让你的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> { }
    

    【讨论】:

      猜你喜欢
      • 2019-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-11
      相关资源
      最近更新 更多