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

Gis*_*shu 12 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;
Run Code Online (Sandbox Code Playgroud)

这有效.

但是,如果我使用了类型化数据模板(通过在模板上替换x:Key和DataType属性,所有项都显示为ICTemplates.Segment(ToString()返回值)
概念是它应该自动获取数据模板类型匹配.有人能在这里发现错误吗?

Gis*_*shu 31

Ze Mistake在这里

<DataTemplate DataType="x:Type local:Segment">  <!-- doesn't work -->
Run Code Online (Sandbox Code Playgroud)

应该

<DataTemplate DataType="{x:Type local:Segment}">
Run Code Online (Sandbox Code Playgroud)

回到家......制作了一个玩具样品,它适应了这种变化.得试试@明天工作.Sheesh ..因为缺少2个曲线..

更新:找到另一个问题

<DataTemplate x:Key="SegTemplate" DataType="{x:Type local:Segment}">  <!-- doesn't work -->
Run Code Online (Sandbox Code Playgroud)

不行.看起来你可以使用Key OR DataType属性.要使这种类型化的数据模板工作..必须删除Key属性,现在它按预期工作.行为对于HierarchicalDataTemplate也是一致的.

<DataTemplate DataType="{x:Type local:Segment}">
Run Code Online (Sandbox Code Playgroud)