#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-данных, смотрите документацию для получения дополнительной информации об этом)