当我尝试指定多个DataTemplates供ContentControl使用以便使用正确的(基于Type)时,我最终得到的内容只是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>
在上面的示例中,当CurrentSelectedTreeViewModel返回TypeAViewModel的树节点时,我会看到“MyApp.ViewModel.TypeAViewModel”。我期待看到我的TypeAViewModelUserControl。
我尝试过放一个&lt; TextBlock Text =“TESTING”/&gt;我的一个DataTemplates中的元素只是为了查看问题是否与我的用户控件有关。结果相同。
任何想法我做错了什么?
(顺便说一下,CurrentlySelectedTreeViewModel是一个在我的树视图中返回当前所选节点的属性。它似乎工作正常 - 当我在树中选择节点时,节点的正确类型名称显示为ContentControl)。 / p>
答案 0 :(得分:29)
x:Type
位应在花括号{}
之间:
<DataTemplate DataType="{x:Type vm:TypeAViewModel}">
答案 1 :(得分:6)
x:Type
是 MarkupExtension ,需要{}
来指示XAML编译器。