TabControl не отображает содержимое на основе типа модели представления

#c# #xaml #mvvm

#c# #xaml #mvvm

Вопрос:

У меня есть TabControl, который определяет некоторые шаблоны данных для отображения содержимого на основе выбранной вкладки.

     <TabControl 
        Grid.Row="1"
        ItemsSource="{Binding ExerciseViewModels}" 
        SelectedItem="{Binding SelectedExercise}">
        
        <TabControl.Resources>
            <DataTemplate DataType="local:SubtractExerciseViewModel">
                <local:SubtractUserControl/>
            </DataTemplate>
            <DataTemplate DataType="local:SumExerciseViewModel">
                <local:SubtractUserControl/>
            </DataTemplate>
        </TabControl.Resources>
        
        <TabControl.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding Name}"/>
            </DataTemplate>
        </TabControl.ItemTemplate>
        
    </TabControl>
  

Но когда я запускаю, на выбранной вкладке отображается имя ViewModel (таким образом, DataTemplate для определенного типа не используется).

введите описание изображения здесь

Чего мне не хватает?

PS: Использование MVVMLight, но на самом деле не имеет никакого значения. Очевидно, что все модели представления существуют (см. Скриншот, в нем есть ссылка на объект типа SuusRekenWonder.SumExerciseViewModel). Итак, я делаю что-то не так в XAML. Но что?

Ответ №1:

В ваших TabControl ресурсах вы должны использовать x:Type для вашего типа данных. Тогда ваши ресурсы выглядят как:

 <TabControl.Resources>
  <DataTemplate DataType="{x:Type local:SubtractExerciseViewModel}">
    <local:SubtractUserControl/>
  </DataTemplate>
  <DataTemplate DataType="{x:Type local:SumExerciseViewModel}">
    <local:SubtractUserControl/>
  </DataTemplate>
</TabControl.Resources>