【发布时间】:2012-03-22 10:38:52
【问题描述】:
我有三门课
public class OSiteEquipment : IPlantItem
public class OSiteSubSystem : IPlantItem
public class OSiteComponent : IPlantItem
每个实现接口IPlantItem
在我的 xaml 中,我绑定到像这样的 Observable 集合
public ObservableCollection<IPlantItem> CurrentItems
有时我需要将CurrentItems 绑定到 OSiteEquipments 的集合,有时需要绑定到 OSiteSubSystem
如果我在像这样加载视图时尝试设置 CurrentItems
CurrentItems = this.siteDocument.Sitestructure.Equipments;
Sitestructure.Equipments 是一个可观察的 OSiteEquipment 集合,编译器说我无法从 Observablecollection<IPlantItem> 转换为 Observablecollection<OSiteEquipment>
有没有办法解决这个问题。我需要进行显式转换吗
编辑
解决了它,而不是将 CurrentItems 定义为 ObservableCollection i 为
object CurrentItems
我一开始没有这样做的原因是我认为我会破坏通知绑定,但它仍然可以正常工作。
【问题讨论】:
-
为什么要避免显式转换?
-
Observablecollection<OSiteEquipment>不是Observablecollection<IPlantItem>。所以当然是编译器对象。 -
看起来
ObservableCollection不是协变的,所以需要显式转换。
标签: c# collections interface