Итак, я нашёл
нормальное решение. Без костылей, без неэффективного кода. Так и знал, что элегантное решение есть. Старое решение выведу в комментарии, потому что жалко потерянного на его написание времени.
Для отображения объекта класса из ViewModel в зависимости от его типа используется элемент
ContentPresenter
. В xaml его использование выглядит примерно так:
<ContentPresenter Content="{Binding Telephone}">
<ContentPresenter.Resources>
<DataTemplate DataType="{x:Type cl:Xiaomi}">
<Label Content="Это ксяоми!"/>
</DataTemplate>
<DataTemplate DataType="{x:Type cl:IPhone}">
<Label Content="Ну а это не очень телефон такой..."/>
</DataTemplate>
</ContentPresenter.Resources>
</ContentPresenter>
P.s. Мне говорили про этот элемент, но я почему-то подумал про ElementControl
, не знаю даже почему.