我有一个窗口,它显示了2个列表,这两个列表应该使用相同的模板。因此,我考虑将模板放到我的窗口中的资源中,像这样:
<Grid>
<Grid.Resources>
<DataTemplate DataType="itemTemplateAsResourceTest:FeatureViewModel" x:Key="FeatureTemplate">
<TextBlock Margin="5" Text="{Binding Name}"/>
</DataTemplate>
</Grid.Resources>
<ListBox ItemTemplate="{StaticResource FeatureTemplate}" ItemsSource="{Binding Features}"/>
</Grid>
Features
只是 FeatureViewModel
的一个列表(我将其放在我的主窗口中进行测试)。而在我的测试中,FeatureViewModel
简单地如下所示:
public class FeatureViewModel
{
public string Name
{
get { return "Name"; }
}
}
在设计器中它能正常工作,但当我启动我的应用程序时,它会显示“找不到资源'FeatureTemplate'”。这不可能是拼写错误,因为设计器能找到它!我做错了什么?
当我直接将模板放入ListBox中时,它可以工作,但这样我就必须复制我的模板:
<Grid>
<ListBox ItemsSource="{Binding Features}">
<ListBox.ItemTemplate>
<DataTemplate DataType="itemTemplateAsResourceTest:FeatureViewModel">
<TextBlock Margin="5" Text="{Binding Name}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
重命名模板或直接将其移动到Windows资源中并没有解决问题,有人看到我的错误吗? 解决方案 更改:
<DataTemplate DataType="itemTemplateAsResourceTest:FeatureViewModel" x:Key="FeatureTemplate">
to
<DataTemplate DataType="{x:Type itemTemplateAsResourceTest:FeatureViewModel}" x:Key="FeatureTemplate">
做到了!