Насколько я понял вам подойдёт ItemsControl с описанным в ItemTemplate шаблоном на основе вашего класса. Можно указать несколько шаблонов для каждого класса или описать ItemsTemplateSelector, который будет выбирать шаблон по любому критерию.
По сути шаблон как раз и генерирует нужный вам UIElement.
Принципы работы следующие: в XAML описывается ItemsControl с нужными вам шаблонами ItemTemplate.
В ItemsControl используете свойство Items, чтобы добавлять/удалять элементы в список или можно (и чаще всего нужно) использовать ItemsSource. Добавлять можно элементы разных классов. Для каждого объекта будет искаться соответствующий шаблон и на его основе генерировать UIElementы.
Литература для прочтения:
Общие сведения о шаблонах данных
Небольшой пример:
<ItemsControl ItemsSource="{Binding Path=MixedList}">
<ItemsControl.Resources>
<DataTemplate DataType="{x:Type local:MyFirstClass}">
<StackPanel><TextBox Text="{Binding Name}" /></StackPanel>
</DataTemplate>
<DataTemplate DataType="{x:Type local:MySecondClass}">
<StackPanel>
<TextBox Text="{Binding Property1}" />
<TextBox Text="{Binding Property2}" />
</StackPanel>
</DataTemplate>
</ItemsControl.Resources>
</ItemsControl>