I have TreeView3 levels in my WPF application.
Level 1 and level 2 have their own HierarchicalDataTemplate. Level 3 has its own DataTemplate.
Here is the XAML code:
<Window.Resources>
<HierarchicalDataTemplate x:Key="Level1Template"
ItemsSource="{Binding Value}"
ItemTemplate="{StaticResource Level2RedTemplate}">
<Border Background="Green">
<TextBlock Text="Level1"/>
</Border>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate x:Key="Level2RedTemplate"
ItemsSource="{Binding Value}"
ItemTemplate="{StaticResource Level3Template}">
<Border Background="Red">
<TextBlock Text="Level2"/>
</Border>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate x:Key="Level2YellowTemplate"
ItemsSource="{Binding Value}"
ItemTemplate="{StaticResource Level3Template}">
<Border Background="Yellow">
<TextBlock Text="Level2"/>
</HierarchicalDataTemplate>
<DataTemplate x:Key="Level3Template">
<Border Background="LightBlue">
<TextBlock Text="Level3"/>
</Border>
</DataTemplate>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Button Grid.Row="0"
Content="Change Template"
Click="ChangeTemplate" />
<TreeView Grid.Row="1"
Name="tv"
ItemsSource="{Binding Items}"
ItemTemplate="{StaticResource Level1Template}"/>
</Grid>
It works fine so far. The problem starts when I want to change DataTemplateLevel2 elements by clicking a button in my window (see image below).

I tried to assign a new one HierarchicalDataTemplatefor mine TreeViewfrom the code behind (in the button event handler) as follows:
Private Sub ChangeTemplate()
CType(tv.ItemTemplate, HierarchicalDataTemplate).ItemTemplate = CType(Me.FindResource("Level2YellowTemplate"), HierarchicalDataTemplate)
End Sub
This is not possible because I get the error message: "as soon as the template object is used (sealed), it cannot be changed."
Is there any way to change this template?