我有一个显示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
的列表(我把它放在我的Mainwindow中用于测试应用程序),而FeatureViewModel在我的测试中看起来像这样:
public class FeatureViewModel
{
public string Name
{
get { return "Name"; }
}
}
它可以在Designer中使用,但是当我启动我的应用程序时,它会说&#34; Resource&#39; FeatureTemplate&#39;未找到。它不会拼错,因为设计师发现它!我做错了什么?
当我将模板直接放入ListBox时,它可以工作,但是我已经复制了我的模板:
<Grid>
<ListBox ItemsSource="{Binding Features}">
<ListBox.ItemTemplate>
<DataTemplate DataType="itemTemplateAsResourceTest:FeatureViewModel">
<TextBlock Margin="5" Text="{Binding Name}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
重命名模板或直接将其移动到Window的资源中并没有解决它,是否有人看到我的错误?
解
更改
<DataTemplate DataType="itemTemplateAsResourceTest:FeatureViewModel" x:Key="FeatureTemplate">
到
<DataTemplate DataType="{x:Type itemTemplateAsResourceTest:FeatureViewModel}" x:Key="FeatureTemplate">
做了伎俩!
答案 0 :(得分:1)
删除public static void Display() {
List<GlosLista> lista = new ArrayList<GlosLista>(gloslista);
DefaultListModel dm = new DefaultListModel();
dm.clear();
for(int i = 0; i < lista.size(); i++){
dm.addElement(lista.get(i));
}
。这是多余的,因为您已经设置了DataType
。
除此之外,它也被错误地写了,因为(与例如x:Key
相对)你必须使用Style.TargetType
标记扩展名。否则,DataType属性(类型为{x:Type ...}
)只是设置为您在XAML中应用的字符串,而不是您要设置的object
。