Когда я пытаюсь указать несколько 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).
Бит x: Type
должен быть между фигурными скобками {}
:
<DataTemplate DataType="{x:Type vm:TypeAViewModel}">
x: Тип
- это MarkupExtension , которое требует {}
для указания компилятору XAML.