Неявная табличка данных не работает

#wpf #datatemplate

#wpf #табличка данных

Вопрос:

Почему следующее неявное DataTemplate не работает? Будет работать только прокомментированная строка DataTemplate .

Примечание: Если я удалю оба DataTemplate параметра, я увижу строковое представление ProductListView полного имени типа.

 <Window.Resources>
  <DataTemplate DataType="vm:ProductListViewModel">
    <v:ProductListView/>
  </DataTemplate>
</Window.Resources>

<TabControl ItemsSource="{Binding Tabs}" TabStripPlacement="Left">
  <TabControl.ItemTemplate>     
    <DataTemplate>
      <TextBlock Text="{Binding Key}"/>
    </DataTemplate>        
  </TabControl.ItemTemplate>
  <TabControl.ContentTemplate>
    <DataTemplate>
      <ContentPresenter Content="{Binding Value}">

        <!--ContentPresenter.ContentTemplate>
          <DataTemplate DataType="vm:ProductListViewModel">
            <v:ProductListView/>
          </DataTemplate>
        </ContentPresenter.ContentTemplate-->

      </ContentPresenter>
    </DataTemplate>
  </TabControl.ContentTemplate>
</TabControl>
  

Ответ №1:

DataType требует использования x:Type в качестве типа свойства Object , поэтому при вводе DataType="ns:Type" вы устанавливаете его в строку "ns:Type" . Если бы тип свойства был Type (как, например, с Style.TargetType ), процессор XAML автоматически преобразовал бы это string в Type .

Таким образом, здесь вы должны написать:

   <DataTemplate DataType="{x:Type vm:ProductListViewModel}">
    <v:ProductListView/>
  </DataTemplate>
  

(Тип свойства Object позволяет создавать шаблоны для XML-данных, смотрите документацию для получения дополнительной информации об этом)