我有三门课
public class OSiteEquipment : IPlantItem
public class OSiteSubSystem : IPlantItem
public class OSiteComponent : IPlantItem
各实现接口(interface)IPlantItem
在我的 xaml 中,我绑定(bind)到一个 Observable 集合,例如
public ObservableCollection<IPlantItem> CurrentItems
有时我需要绑定(bind)CurrentItems
到 OSiteEquipments 的集合,有时到 OSiteSubSystem
如果我在加载 View 时尝试设置 CurrentItems,如下所示
CurrentItems = this.siteDocument.Sitestructure.Equipments;
哪里Sitestructure.Equipments
是 OSiteEquipment 的可观察集合,编译器说我无法从 Observablecollection<IPlantItem>
转换至Observablecollection<OSiteEquipment>
有没有办法解决这个问题。我需要进行显式转换
编辑
解决了它,而不是将 CurrentItems 定义为 ObservableCollection i
object CurrentItems
我一开始没有这样做的原因是我认为我会破坏通知绑定(bind),但它仍然工作正常。
最佳答案
从 ObservableCollection<OSiteEquipment>
显式转换至Observablecollection<IPlantItem>
也不行。如果您希望它起作用,您需要复制 OSiteEquipment
的元素收藏到新IPlantItem
。但是对原始集合的更改不会影响新集合,因此这不是您想要的。
您已经找到了解决方案,但我认为如果您更改 CurrentItems
的类型会更好至IEnumerable<IPlantItem>
。这不应该影响绑定(bind),但它意味着您的代码更安全且更 self 记录(该属性应该是什么更明显)。
关于c# - 通用列表转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9558495/