Почему мой типизированный шаблон данных не применяется?
Я использую Linq To Sql для заполнения списка с помощью сегментных объектов, где создан сегмент, созданный конструктором/порожденный ORM классом.
<Window x:Class="ICTemplates.Window1"
...
xmlns:local="clr-namespace:ICTemplates"
Title="Window1" Height="300" Width="300">
<Window.Resources>
<DataTemplate x:Key="MyTemplate">
<!-- <DataTemplate DataType="x:Type local:Segment"> -->
// some stuff in here
</DataTemplate>
</Window.Resources>
<ListView x:Name="tvwSegments" ItemsSource="{Binding}" ItemTemplate="{StaticResource MyTemplate}" MaxHeight="200"/>
// code-behind
var queryResults = from segment in tblSegments
where segment.id <= iTemplateSid
select segment;
tvwSegments.DataContext = queryResults;
Это работает.
Однако, если я использовал шаблон типизированных данных (заменяя x: Key атрибутом DataType на шаблоне, все элементы отображаются с помощью ICTemplates.Segment
(возвращаемое значение ToString())
Понятие заключается в том, что он должен автоматически подбирать шаблон данных, если тип совпадает. Кто-нибудь может заметить ошибку здесь?
Ответы
Ответ 1
Ze Ошибка здесь
<DataTemplate DataType="x:Type local:Segment"> <!-- doesn't work -->
должен быть
<DataTemplate DataType="{x:Type local:Segment}">
Пришел домой... сделал игрушку-образец, и он работал с этим изменением. Должен попробовать это @работать завтра. Sheesh.. за 2 колена.
Обновить: обнаружен другой доступ
<DataTemplate x:Key="SegTemplate" DataType="{x:Type local:Segment}"> <!-- doesn't work -->
не будет работать. Похоже, вы можете использовать его либо с атрибутом Key OR DataType. Чтобы заставить этот типизированный шаблон данных работать, пришлось удалить атрибут Key, и теперь он работает так, как ожидалось. Поведение совместимо и для HierarchicalDataTemplate.
<DataTemplate DataType="{x:Type local:Segment}">
Ответ 2
Это просто догадка, но может быть, потому что контекст установлен на IQueryable? Если вы установите DataContext в один экземпляр сегмента, вы получите тот же результат?