#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>