WPF列表中每个项目的不同项目模板?

时间:2020-03-06 14:55:04  来源:igfitidea点击:

我在列表控件中有很多项目。我希望每个项目都有不同的项目模板,具体取决于项目的类型。因此,列表中的第一项是ObjectA类型,因此我希望使用ItemTemplateA呈现它。第二项是ObjectB类型,因此我希望它具有用于渲染的ItemTemplateB。目前,我只能使用ItemTemplate设置为所有模板定义一个模板。有什么办法可以做到这一点?

解决方案

看一下列表控件的ItemTemplateSelector属性。我们可以将其指向自定义TemplateSelector,并确定在代码中使用哪个模板。

这是描述TemplateSelectors的博客文章:

http://blogs.interknowlogy.com/johnbowen/archive/2007/06/21/20463.aspx

编辑:这是一个更好的帖子:

http://blog.paranoidferret.com/index.php/2008/07/16/wpf-tutorial-how-to-use-a-datatemplateselector/

ItemTemplateSelector可以使用,但是我认为在资源部分中创建多个DataTemplate,然后为每个数据库提供一个DataType会更容易。如果项目生成器检测到匹配的数据类型,它将自动使用此DataTemplate

<DataTemplate DataType={x:Type local:ObjectA}>
   ...
</DataTemplate>

同时确保没有为DataTemplate设置x:Key。
在此处阅读有关此方法的更多信息