Я бы просто использовал WPF DataTemplates
, чтобы сообщить WPF, как рисовать каждый тип диаграммы, когда он встречает объект этого типа в визуальном дереве
<Application.Resources>
<DataTemplate DataType="{x:Type local:BarChart}">
<local:BarChartUserControl />
</DataTemplate>
<DataTemplate DataType="{x:Type local:PieChart}">
<local:PieChartUserControl />
</DataTemplate>
</Application.Resources>
DataContext
за UserControl будет по-прежнемубыть вашим объектом, так что вы можете построить UserControl с ожиданием, что DataContext будет иметь тип BarChart
или PieChart
Например, ItemsControl
будет рисовать ваш список диаграмм, используя правильный шаблондля каждого типа без дополнительной кодировки:
<ItemsControl ItemsSource="{Binding Charts}" />
Или вы можете вручную добавить свой объект диаграммы в визуальное дерево, используя что-то вроде ContentControl
<ContentControl Content="{Binding SomeChartProperty}" />
В качестве примечания,Я очень рекомендую перейти на использование MVVM вместо MVP.Он идеально подходит для WPF и является стандартным шаблоном проектирования, используемым при работе с WPF или Silverlight.