2012-10-14 93 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以在運行時根據特定標準選擇模板。