В настоящее время у меня есть пара различных пользовательских элементов управления, которые обеспечивают одинаковую функциональность: три разные кнопки, называемые «Выбрать все», «Отменить выбор всех» и «Переключить выбранные». Они выполняют действия со списком элементов, которые реализуют мой интерфейс ICheckable
в каждом пользовательском элементе управления. Я хотел объединить все это так, чтобы все команды и кнопки определялись только в одном месте - новом пользовательском элементе управления, а не дублировались в двух разных пользовательских элементах управления. Моя проблема в том, что в одном пользовательском элементе управления я имею дело со списком моего класса Template
, а в другом пользовательском элементе управления есть список класса Defect
. И Template
, и Defect
реализуют ICheckable
, что означает, что к ним применяются параметры «Выделить все», «Отменить выбор всех» и «Переключить выбранное».
У меня есть универсальный контейнерный класс SelectableItems<T>
, который требует T
для соответствия этим ограничениям: where T : ICheckable, IEquatable<T>, IDeepCloneable<T>
. SelectableItems<T>
предоставляет свойство ObservableCollection<T> Items
вместе с другими полезными свойствами, такими как bool IsAnyItemSelected
, T SelectedItem
и т. Д. Эти свойства будут использоваться при реализации команд Выбрать все и т. Д. И Template
, и Defect
соответствуют всем этим ограничениям. Я собирался создать свойство зависимости в моем новом пользовательском элементе управления, к которому я бы привязал свойство SelectableItems<Template>
и SelectableItems<Defect>
из других своих пользовательских элементов управления. Я не думаю, что возможно сделать общее свойство зависимости, потому что у меня не может быть общего класса UserControl
, так как я использую XAML. Как я должен идти об этом? Я использую .NET 3.5.
Подводя итог, вот что я хочу:
TemplateList user control ItemSelection user control
------------------------------------------- --------------------------
SelectableItems<Template> TemplateContainer ==Bind==> unknownType? ItemContainer
DefectList user control ItemSelection user control
--------------------------------------- --------------------------
SelectableItems<Defect> DefectContainer ==Bind==> unknownType? ItemContainer
Редактировать: Я рассмотрел просто добавление свойств зависимостей в мой новый пользовательский элемент управления ItemSelection
для всех полезных свойств в модели представления SelectableItems<T>
, таких как IsAnyItemSelected
и т. Д. Это было бы хорошо для большинства свойств, но я не решался сделать это для ObservableCollection<T> Items
, потому что я столкнулся с той же общей проблемой, как описано выше, и я не верил, что все работает нормально, если я просто использовал IEnumerable
вместо ObservableCollection<something>
, Может быть, я должен создать класс ObservableCollection
, который не является универсальным (как в этот вопрос )?