我有三个班级
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
我在开始时没有这样做的原因是我认为我会破坏通知绑定,但它仍然可以正常工作。
答案 0 :(得分:2)
从ObservableCollection<OSiteEquipment>
到Observablecollection<IPlantItem>
的显式转换也不起作用。如果您希望此方法有效,则需要将OSiteEquipment
集合的元素复制到新的IPlantItem
。但是,对原始集合的更改不会影响新集合,因此这不是您想要的。
您已经找到了解决方案,但我认为如果您将CurrentItems
的类型更改为IEnumerable<IPlantItem>
会更好。这不应该影响绑定,但这意味着您的代码更安全,更自我记录(该属性应该更明显)。