2012-10-14 52 views
2

我有一个ListBox和多个DataTemplate s,在单独的文件中。动态绑定到DataTemplate

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

Styles.xaml文件:

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

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

我想改变ListBoxItemTemplate取决于在其列表对象的类型。

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

回答

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"]; 
+0

仅供参考。 WinRT DataTemplate类不支持DataType。 – Denis

+0

@Denis,是的,谢谢。我会记得那:) – 2kay

0

对于您的要求,WPF内置了支持。开始阅读DataTemplateSelector以在运行时根据特定标准选择模板。