У меня есть элемент управления, который обычно используется в моем приложении, но его необходимо подключать к различным классам в зависимости от того, где он используется.Я хотел бы реализовать базовый класс, производный от UserControl, а затем наследовать классы от него, которые присоединяются к различным моделям, каждая из которых также является производной от базового класса.
Итак, у меня есть наборбазовые классы (BaseControlView, BaseControlViewModel, BaseControlModel), из которых я извлекаю три класса (CarControlView, CarControlViewModel, CarControlModel) и три класса (TruckControlView, TruckControlViewModel, TruckControlModel).Набор свойств для автомобиля и грузовика пересекается, но не полностью, и я не знаю, каким образом я могу использовать коллекцию базового класса для доступа к элементам, содержащимся в автомобиле или грузовике.
Элемент управлениясам использует пользовательский VisualStateManager для управления изменениями состояния, и для этого ему нужно будет ссылаться на некоторые специфичные для производного класса данные из своих коллекций.
Я все понял, ноУ меня есть камнем преткновения, как обрабатывать производные VisualStateManager.Xaml, где я указываю, выглядит следующим образом:
<UserControl x:Class="View.BaseControl" ... >
<UserControl.Resources>
<!-- All the stuff to get me here -->
<VisualStateManager.CustomVisualStateManager>
<local:BaseControlStateManager/> <! <<<<--- Here! -->
</VisualStateManager.CustomVisualStateManager>
<!-- The rest of the control template definition -->
</UserControl.Resources>
<Grid>
<!-- My components go here -->
</Grid>
</UserControl>
Он находится в шаблоне элемента управления внутри ресурсов элемента управления.
Я бы хотел избежать создания и изменения копиифайл xaml базового класса для каждого производного класса, поэтому я подумал, что если бы я мог установить CustomVisualStateManager в конструкторе в коде позади, у меня мог бы быть пустой xaml - только внешнее определение - для производного класса:
<local:BaseControl x:Class="View.CarControl" ... >
</local:BaseControl>
Вы знаете, как я могу это сделать?