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を持っていました(これはジェネリックコレクションです)。ありがとう! –