我正在使用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匹配,它应该自动获取数据模板。有人能在这里发现错误吗?
答案 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的单个实例,是否会得到相同的结果?