Справочная информация. Я использую C #, WPF и Calburn.Micro для создания GUI-ориентированного приложения с предопределенным набором полиморфных объектов, достигаемых подклассами, унаследованными от абстрактного родительского класса.
Пользователь создает экземпляры различных подклассов, используя форму, которая содержит поле со списком, чтобы выбрать, какой класс создавать экземпляром (также предполагается, что Combobox SelectedItem инициирует изменения содержимого формы в соответствии со свойствами выбранного типа).
Мне удалось перенести все наследуемые подклассы в коллекцию BindableCollection с помощью:
private void LoadSubClasses()
{
Type _parentClass = typeof(ParentClass);
Assembly assembly = Assembly.GetExecutingAssembly();
Type[] _types = assembly.GetTypes();
IEnumerable<Type> SubClassesIEnumerable = _types.Where(t => t.IsSubclassOf(_parentClass));
foreach (var _subclass in SubClassesIEnumberable)
{
SubClassesColletion.Add(_subclass);
}
}
private BindableCollection<Type> _subClassesCollection = new BindableCollection<Type>();
public BindableCollection<Type> SubClassesCollection
{
get { return _subClassesCollection; }
set { _subClassesCollection = value; }
}
Во время выполнения я могу видеть комбинированный список, заполненный пустыми элементами (и различными коллекциями в отладчике), что делает меня непонятнымэто пока так хорошо.
Как я уже говорил ранее, часть содержимого формы будет меняться в соответствии с SelectedItem Combobox, поэтому я думаю, что правильное направление - это чтобы тип Combobox был типом, изатем свяжите различные элементы со свойствами выбранного типа.Я пытаюсь реализовать это с помощью ItemsTempalte, начиная с «Селектора подкласса», отображающего абстрактное свойство (называемое «ViewName»), которое переопределяется всеми подклассами:
<ComboBox x:Name="SubClassesCollection" Height="23" Margin="5,0,5,0">
<ComboBox.ItemTemplate>
<DataTemplate>
<Label Content="{Binding Path=ViewName}" Margin="-5"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
Но я боюсь, что это какнасколько я могу судить, поскольку поиск различных решений никуда меня не привел.