泛型列表转换

本文关键字:转换 列表 泛型 | 更新日期: 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>会更好。这不应该影响绑定,但这意味着你的代码更安全,更自我文档化(这个属性应该是什么更明显)。

相关文章: