Подтвердить что ты не робот

Как автоматически использовать DataTemplate на основе ContentControl Current Content DataType

Когда я пытаюсь указать несколько DataTemplates для использования ContentControl, чтобы использовать правильный (основанный на типе), я получаю контент, который является просто значением Content ToString().

<ContentControl DataContext="{Binding MyTreeRootViewModels}" Content="{Binding /, Path=CurrentlySelectedTreeViewModel}">
  <ContentControl.Resources>
     <DataTemplate DataType="x:Type vm:TypeAViewModel">
        <StackPanel>
           <local:TypeAUserControl />
           </StackPanel>
     </DataTemplate>

     <DataTemplate DataType="x:Type vm:TypeBViewModel">
        <StackPanel>
           <local:TypeBUserControl />
        </StackPanel>
     </DataTemplate>
  </ContentControl.Resources>
</ContentControl>

В приведенном выше примере я увижу "MyApp.ViewModel.TypeAViewModel", отображаемый, когда дерево node TypeAViewModel возвращается в CurrentSelectedTreeViewModel. Я ожидаю увидеть мой TypeAViewModelUserControl.

Я попытался поместить один текст TextBlock Text = "TESTING" / > элемент в одном из моих DataTemplates, чтобы увидеть, связана ли проблема с моими пользовательскими элементами управления. Тот же результат.

Любые идеи, что я делаю неправильно?

(Кстати, CurrentSelectedTreeViewModel является свойством, которое возвращает выбранный в данный момент node в моем древовидном представлении. Кажется, что все работает нормально - поскольку я выбираю узлы в дереве, появляется правильное имя типа для node ContentControl).

4b9b3361

Ответ 1

бит x:Type должен находиться между фигурными фигурными скобками {}:

<DataTemplate DataType="{x:Type vm:TypeAViewModel}">

Ответ 2

x:Type - это MarkupExtension, для которого требуется {} указать компилятору XAML.