动态绑定到DataTemplate

时间:2012-10-14 09:26:07

标签: c# xaml data-binding windows-8 windows-runtime

我在单独的文件中有ListBox和多个DataTemplate

<ListBox ItemTemplate="{StaticResource ItemTemplate1}"/>

Styles.xaml文件中:

<DataTemplate x:Key="ItemTemplate1">...</DataTemplate>

<DataTemplate x:Key="ItemTemplate2">...</DataTemplate>

我想根据列表中的对象类型更改ItemTemplate的{​​{1}}。

有没有办法访问代码隐藏中的单独ListBox,以便我可以绑定到DataTemplate的属性?

3 个答案:

答案 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以根据特定条件在运行时选择模板。