Подтвердить что ты не робот

Почему мой типизированный шаблон данных не применяется?

Я использую 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())
Понятие заключается в том, что он должен автоматически подбирать шаблон данных, если тип совпадает. Кто-нибудь может заметить ошибку здесь?

4b9b3361

Ответ 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 в один экземпляр сегмента, вы получите тот же результат?