WPF: reaplicar DataTemplateSelector quando um determinado valor for alterado

Então, aqui está o XAML que eu tenho:

<ItemsControl ItemsSource="{Binding Path=Groups}" ItemTemplateSelector="{Binding RelativeSource={RelativeSource AncestorType=Window}, Path=ListTemplateSelector}"/>

Aqui está minha classe ListTemplateSelector:

public class ListTemplateSelector : DataTemplateSelector {
public DataTemplate GroupTemplate { get; set; }
public DataTemplate ItemTemplate { get; set; }
public override DataTemplate SelectTemplate(object item, DependencyObject container) {
    GroupList<Person> list = item as GroupList<Person>;
    if (list != null && !list.IsLeaf)
        return GroupTemplate;
    return ItemTemplate;
}
}

O modelo de dados GroupTemplate faz referência ao ListTemplateSelector dentro de si, e é por isso que eu configurei como ele. É o único truque recursivo que eu pude montar. Mas esse não é o problema que estou tendo.

Meu problema é que eu quero mudar de ItemTemplate para GroupTemplate quando a propriedade IsLeaf for alterada. Isso funciona muito bem na primeira vez, pois ele lê a propriedade pela primeira vez. Mas uma vez que essa propriedade é alterada, o seletor de modelo não é reaplicado. Agora, eu poderia usar gatilhos para vincular ao valor e definir o modelo de item adequadamente, mas preciso definir um modelo diferente para cada item, pois eles podem estar em um estado diferente.

Por exemplo, digamos que eu tenha uma lista de grupos como este:

Grupo 1: IsLeaf = false, então template = GroupTemplate

Grupo 2: IsLeaf = true, então template = ItemTemplate

Grupo 3: IsLeaf = false, então template = GroupTemplate

E quando a propriedade IsLeaf do grupo 1 muda para true, o modelo precisa mudar automaticamente para ItemTemplate.

EDITAR:

Aqui está a minha solução temporária. Existe alguma maneira melhor de fazer isso?

<ItemsControl ItemsSource="{Binding Path=Groups}">
<ItemsControl.ItemTemplate>
    <DataTemplate>
        <ContentControl Content="{Binding}">
            <ContentControl.Style>
                <Style TargetType="{x:Type ContentControl}">
                    <Setter Property="ContentTemplate" Value="{DynamicResource ItemTemplate}"/>
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding Path=IsLeaf}" Value="False">
                            <Setter Property="ContentTemplate" Value="{DynamicResource GroupTemplate}"/>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </ContentControl.Style>
        </ContentControl>
    </DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>

questionAnswers(5)

yourAnswerToTheQuestion