I have three classes
public class OSiteEquipment : IPlantItem
public class OSiteSubSystem : IPlantItem
public class OSiteComponent : IPlantItem
Each implement interface IPlantItem
In my xaml i bind to an Observable collection like
public ObservableCollection<IPlantItem> CurrentItems
Sometimes i need to bind CurrentItems to an collection of OSiteEquipments and sometimes to OSiteSubSystem
If i try to set CurrentItems when i load the view like this
CurrentItems = this.siteDocument.Sitestructure.Equipments;
Where Sitestructure.Equipments is an observable collection of OSiteEquipment, compiler says i cant convert from Observablecollection<IPlantItem> to Observablecollection<OSiteEquipment>
Is there a way to solve this. DO i need to make an explicit conversion
EDIT
Solved it , instead of defining CurrentItems as ObservableCollection i as
object CurrentItems
The reason i didnt do it in the beginning was that i thougt i would destroy the notification binding, but it still works fine.
Explicit conversion from
ObservableCollection<OSiteEquipment>toObservablecollection<IPlantItem>wouldn’t work either. If you wanted this to work, you would need to copy the elements of theOSiteEquipmentcollection to a newIPlantItem. But then changes to the original collection wouldn’t affect the new collection, so this is not what you want.You already found a solution, but I think it would be better if you changed the type of
CurrentItemstoIEnumerable<IPlantItem>. This shouldn’t affect the binding, but it means your code is safer and more self-documenting (it’s more obvious what should that property be).