Почему мой типизированный шаблон данных не применяется? - PullRequest
12 голосов
/ 16 декабря 2008

Я использую Linq To Sql, чтобы заполнить список объектами Segment, где Segment - это класс, созданный дизайнером / 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 ())
Концепция заключается в том, что он должен автоматически выбирать шаблон данных, если тип совпадает. Может кто-то здесь заметить ошибку?

Ответы [ 2 ]

30 голосов
/ 16 декабря 2008

Зе Ошибка здесь

<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}">
0 голосов
/ 16 декабря 2008

Это всего лишь предположение, но может ли это быть из-за того, что контекст настроен на IQueryable? Если вы установите для DataContext один экземпляр сегмента, вы получите тот же результат?

...