Если я вас правильно понимаю, у вас есть что-то вроде этого:
public class MasterClass
{
public List<object> Details;
}
Где Details
- это Список, который содержит много разных типов объектов, и вы хотите отобразить разные View (DataGrid) для каждого типа объектов?
Я бы использовал TabControl
с его ItemsSource
, связанным со свойством Details
, а затем использовал бы DataTrigger
в TabItem, чтобы определить, как должен отображаться ItemTemplate (содержимое вкладки).
Что-то вроде этого:
<TabControl ItemsSource="{Binding Details}">
<TabControl.Resources>
<Style TargetType="{x:Type TabItem}">
<Setter Property="Template" Value="{StaticResource DefaultTemplate}" />
<Style.Triggers>
<DataTrigger Property="{Binding ItemType}" Value="Address">
<Setter Property="Template" Value="{StaticResource AddressTemplate}" />
</DataTrigger>
<DataTrigger Property="{Binding ItemType}" Value="Phone">
<Setter Property="Template" Value="{StaticResource PhoneTemplate}" />
</DataTrigger>
</Style>
</TabControl.Resources>
</TabControl>
Это всего лишь грубый пример, который может изменить шаблон TabItem на основе того, является ли Detail.ItemType
«Адрес» или «Телефон». Я также делал это в прошлом с помощью конвертера, который проверяет тип объекта вместо необходимости иметь свойство Type для объекта, что работает еще лучше.
Если вам интересно, я написал небольшую статью здесь , в которой показано несколько способов переключения Views или UserControls на основе данных ViewModel