我在单独的文件中有ListBox
和多个DataTemplate
。
<ListBox ItemTemplate="{StaticResource ItemTemplate1}"/>
在Styles.xaml
文件中:
<DataTemplate x:Key="ItemTemplate1">...</DataTemplate>
<DataTemplate x:Key="ItemTemplate2">...</DataTemplate>
我想根据列表中的对象类型更改ItemTemplate
的{{1}}。
有没有办法访问代码隐藏中的单独ListBox
,以便我可以绑定到DataTemplate
的属性?
答案 0 :(得分:1)
尝试此解决方案几乎可以实现您的目标:
在WP7中按类型动态应用数据模板
http://www.codeproject.com/Articles/113152/Applying-Data-Templates-Dynamically-by-Type-in-WP7
它基于WP7,但也适合你。
答案 1 :(得分:1)
没有TemplateSelector
的方法是指定DataType属性,不要指定x:Key。
<DataTemplate DataType="{x:Type Type1}">...</DataTemplate>
<DataTemplate DataType="{x:Type Type2}">...</DataTemplate>
在这种情况下,适当的DataTemplate将自动应用于绑定了指定类型属性的所有位置。
但我更喜欢使用TemplateSelector
。
要在代码隐藏中访问分离的DataTemplate,首先应该获取资源字典:
var dict = new ResourceDictionary
{Source = new Uri("/ProjectNamespace;component/Styles.xaml", UriKind.Relative)};
然后你可以得到模板:
var dataTemplate = (DataTemplate) dict["ItemTemplate1"];
答案 2 :(得分:0)
WPF中有内置支持可满足您的需求。开始阅读DataTemplateSelector以根据特定条件在运行时选择模板。