是否有任何方法可以從XAML自己創建一個DataTemplate引用?在這種特殊情況下,試圖從包含在同一DataTemplate中的ListBox引用DataTemplate。這是我想要的解決方案,這是行不通的。ListBox中的嵌套DataTemplates
<DataTemplate x:Key="nestedItem" DataType="{x:Type local:NestedItem}">
<Expander Header="{Binding Path=Name}">
<ListBox ItemsSource="{Binding Path=Items}" x:Name="itemsList"
ItemTemplate="{StaticResource nestedItem}"/>
</Expander>
</DataTemplate>
而且這裏是我目前使用的解決方案,它的工作原理。
<DataTemplate x:Key="nestedItem" DataType="{x:Type local:NestedItem}">
<Expander Header="{Binding Path=Name}" Expanded="OnItemExpanded">
<ListBox ItemsSource="{Binding Path=Items}" x:Name="itemsList"/>
</Expander>
</DataTemplate>
隨着後面的代碼:
private void OnItemExpanded(object sender, RoutedEventArgs e)
{
if (e.OriginalSource != sender) return;
var source = (Expander) sender;
ListBox listBox = source.FindName("itemsList") as ListBox;
NestedItem item = source.DataContext as NestedItem;
listBox.ItemsSource = item.Items;
listBox.ItemTemplate = (DataTemplate) FindResource("nestedItem");
}
我甚至沒有測試過DynamicResource出於一些瘋狂的原因,我的錯誤,但肯定它的工作原理。對於集合中的某些項目,我已經有了一個DataTemplateSelector,它根據對象類型(它是一個通用集合)來更改模板。謝謝! – 2009-07-08 22:12:17