通用列表转换

时间:2012-03-04 20:25:48

标签: c# collections interface

我有三个班级

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

我在开始时没有这样做的原因是我认为我会破坏通知绑定,但它仍然可以正常工作。

1 个答案:

答案 0 :(得分:2)

ObservableCollection<OSiteEquipment>Observablecollection<IPlantItem>的显式转换也不起作用。如果您希望此方法有效,则需要将OSiteEquipment集合的元素复制到新的IPlantItem。但是,对原始集合的更改不会影响新集合,因此这不是您想要的。

您已经找到了解决方案,但我认为如果您将CurrentItems的类型更改为IEnumerable<IPlantItem>会更好。这不应该影响绑定,但这意味着您的代码更安全,更自我记录(该属性应该更明显)。