Я отредактировал вопрос, чтобы сделать то, что я хочу получить, более понятным.
Вот оригинальный вопрос:
Я работаю над классом, который наследуется от Control, который будет использоваться в моем представлении и включает некоторые свойства зависимости.
Один из этих DP - IEnumerable(Of RfidTag)
и будет связан с ObservableCollection(Of RfidTag)
внутри виртуальной машины.
Класс RfidTag
определяется как открытый класс в том же файле, в котором находится класс виртуальной машины.
Вопросы:
1. Является ли хорошей практикой выставлять связанный с VM класс классу Control?
2. Является ли исходный файл виртуальной машины хорошим местом для класса RfidTag
?
ОБНОВЛЕНИЕ 1
В моей логике приложения (я думаю, я мог бы сказать, что в моей модели) есть событие, опубликованное через Eventaggregator. Полезная нагрузка события - это список ModelRfidTag
(это класс модели).
Моя ВМ подписывается на это событие, и я создал класс RfidTag
, чтобы обернуть свой класс Model, и предоставляет некоторые дополнительные свойства, относящиеся только к ВМ.
Когда выполняется обработчик событий внутри виртуальной машины, ObservableCollection(Of RfidTag)
связывается из представления.
Затем в представлении я получил несколько таких контрольных экземпляров
<c:RfidTagPresenter
TagPosition="1"
Collection="{Binding RfidTagList, Mode=OneWay}" />
Затем в моем RfidTagPresenter
(классе, который наследуется от Control) у меня есть DP типа RfidTag
(называемый RfidTagResult
), который возвращает объект в OC, который имеет свойство Position
(свойство доступно внутри класса RfidTag
), равного значению, установленному TagPosition
DP.
Таким образом, ControlTemplate RfidTagPresenter
может привязывать свои элементы к нужному объекту.
Это упрощение того, что я хочу сделать. В реальном приложении есть некоторые другие DP, для которых выполняется выбор RfidTagResult
ОБНОВЛЕНИЕ 2
После небольшого исследования кажется, что я могу решить одну проблему с помощью индексированного свойства, которое возвращает (в методе get) объект из коллекции, которую я хочу связать.
Однако проблема все еще существует: мой элемент управления должен иметь DP типа RfidTag, чтобы относительный ControlTemplate мог связываться со свойством, объявленным в классе RfidTag.
Итак: возможно ли (читай: хорошая практика) иметь DP типа, который относится к классу, связанному с VM?
Другими словами: может ли пользовательский элемент управления знать тип класса, используемый виртуальной машиной?