Как автоматически использовать DataTemplate на основе DataType текущего содержания ContentControl

Когда я пытаюсь указать несколько DataTemplates для использования ContentControl так, чтобы корректный (на основе Типа) использовался, я заканчиваю с Содержанием, которое является просто 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", отображенный, когда древовидный узел TypeAViewModel возвращается CurrentlySelectedTreeViewModel. Я ожидаю видеть свой TypeAViewModelUserControl.

Я попытался поместить сингл <текст TextBlock = "ТЕСТИРУЮЩИЙ"/> элемент в одном из моих DataTemplates только, чтобы видеть, была ли проблема связана с моими пользовательскими элементами управления. Тот же результат.

Какие-либо идеи, что я делаю неправильно?

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

26
задан Emmanuel 10 February 2013 в 02:20
поделиться

2 ответа

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

<DataTemplate DataType="{x:Type vm:TypeAViewModel}">
30
ответ дан 28 November 2019 в 07:35
поделиться

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

6
ответ дан 28 November 2019 в 07:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: