为什么我的类型化数据模板没有被应用?

时间:2008-12-16 09:52:10

标签: wpf datatemplate

我正在使用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()返回值)
这个概念是,如果Type匹配,它应该自动获取数据模板。有人能在这里发现错误吗?

2 个答案:

答案 0 :(得分:30)

Ze Mistake就在这里

<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}">

答案 1 :(得分:0)

这只是猜测,但可能是因为上下文设置为IQueryable?如果将DataContext设置为Segment的单个实例,是否会得到相同的结果?