web-dev-qa-db-ja.com

ContentControlの現在のコンテンツのDataTypeに基づいてDataTemplateを自動的に使用する方法

ContentControlで使用する複数のDataTemplatesを指定して、(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>

上記の例では、TypeAViewModelのツリーノードがCurrentlySelectedTreeViewModelによって返されると、「MyApp.ViewModel.TypeAViewModel」が表示されます。 TypeAViewModelUserControlが表示されることを期待しています。

問題がユーザーコントロールに関連しているかどうかを確認するために、DataTemplatesの1つに単一の<TextBlock Text = "TESTING" />要素を配置しようとしました。同じ結果。

私が間違っていることについて何か考えはありますか?

(ちなみに、CurrentlySelectedTreeViewModelは、ツリービューで現在選択されているノードを返すプロパティです。問題なく機能しているようです。ツリーでノードを選択すると、ノードの正しいタイプ名がContentControlに表示されます)。

27
Emmanuel

x:Typeビットは中括弧の間にある必要があります{}

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

x:TypeMarkupExtensionであり、XAMLコンパイラに示すには{}が必要です。

6
John Bowen