泛型列表转换
本文关键字:转换 列表 泛型 | 更新日期: 2023-09-27 18:26:55
我有三个类
public class OSiteEquipment : IPlantItem
public class OSiteSubSystem : IPlantItem
public class OSiteComponent : IPlantItem
每个机具接口IPlantItem
在我的xaml中,我绑定到像这样的Observable集合
public ObservableCollection<IPlantItem> CurrentItems
有时我需要将CurrentItems
绑定到OSiteEquipments集合,有时还需要绑定到OSite子系统
如果我在加载类似的视图时尝试设置CurrentItems
CurrentItems = this.siteDocument.Sitestructure.Equipments;
当Sitestructure.Equipments
是OSiteEquipment的可观察集合时,编译器说我无法从Observablecollection<IPlantItem>
转换为Observablecollection<OSiteEquipment>
有办法解决这个问题吗。我需要做一个显式转换吗
编辑
解决了它,而不是将CurrentItems定义为ObservableCollection i定义为
object CurrentItems
我一开始没有这么做的原因是我以为我会破坏通知绑定,但它仍然很好。
从ObservableCollection<OSiteEquipment>
到Observablecollection<IPlantItem>
的显式转换也不起作用。如果希望这样做,则需要将OSiteEquipment
集合的元素复制到新的IPlantItem
中。但是,对原始集合的更改不会影响新集合,因此这不是您想要的。
您已经找到了解决方案,但我认为如果将CurrentItems
的类型更改为IEnumerable<IPlantItem>
会更好。这不应该影响绑定,但这意味着你的代码更安全,更自我文档化(这个属性应该是什么更明显)。