Преобразование общего списка - PullRequest
2 голосов
/ 05 марта 2012

У меня есть три класса

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 Ответ

2 голосов
/ 05 марта 2012

Явное преобразование из ObservableCollection<OSiteEquipment> в Observablecollection<IPlantItem> также не будет работать.Если вы хотите, чтобы это работало, вам необходимо скопировать элементы коллекции OSiteEquipment в новый IPlantItem.Но тогда изменения в исходной коллекции не повлияют на новую коллекцию, так что это не то, что вам нужно.

Вы уже нашли решение, но я думаю, что было бы лучше, если бы вы изменили тип CurrentItems до IEnumerable<IPlantItem>.Это не должно влиять на привязку, но означает, что ваш код более безопасный и самодокументируемый (более очевидно, каким должно быть это свойство).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...