WPF: vuelva a aplicar DataTemplateSelector cuando cambie un determinado valor

Así que aquí está el XAML que tengo:

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

Aquí está mi clase 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;
}
}

La plantilla de datos GroupTemplate hace referencia al ListTemplateSelector dentro de sí misma, por lo que es por eso que lo configuré como lo hice. Es el único truco recursivo que pude armar. Pero ese no es el problema que estoy teniendo.

Mi problema es que quiero cambiar de ItemTemplate a GroupTemplate cuando cambia la propiedad IsLeaf. Esto funciona muy bien la primera vez, ya que lee la propiedad la primera vez. Pero una vez que esta propiedad cambia, el selector de plantilla no se vuelve a aplicar. Ahora, podría usar desencadenantes para vincular el valor y establecer la plantilla de elemento de manera adecuada, pero necesito poder establecer una plantilla diferente para cada elemento, ya que podrían estar en un estado diferente.

Por ejemplo, digamos que tengo una lista de grupos como este:

Grupo 1: IsLeaf = falso, entonces template = GroupTemplate

Grupo 2: IsLeaf = verdadero, por lo que template = ItemTemplate

Grupo 3: IsLeaf = falso, entonces template = GroupTemplate

Y una vez que la propiedad IsLeaf del grupo 1 cambia a verdadero, la plantilla necesita cambiar automáticamente a ItemTemplate.

EDITAR:

Aquí está mi solución temporal. ¿Alguna mejor manera de hacerlo?

<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>

Respuestas a la pregunta(5)

Su respuesta a la pregunta