WPF: повторно применить DataTemplateSelector при изменении определенного значения

Итак, вот XAML, который у меня есть:

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

Вот мой класс 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;
}
}

Шаблон данных GroupTemplate ссылается на ListTemplateSelector внутри себя, поэтому я настроил его так, как будто он настроен. Это единственный рекурсивный хак, который я мог собрать. Но проблема не в этом.

Моя проблема заключается в том, что я хочу изменить ItemTemplate на GroupTemplate при изменении свойства IsLeaf. Это прекрасно работает в первый раз, так как он читает свойство в первый раз. Но как только это свойство изменяется, селектор шаблона не применяется повторно. Теперь я могу использовать триггеры для привязки к значению и установки шаблона элемента соответствующим образом, но мне нужно иметь возможность устанавливать разные шаблоны для каждого элемента, так как они могут находиться в другом состоянии.

Например, скажем, у меня есть список таких групп:

Группа 1: IsLeaf = false, поэтому template = GroupTemplate

Группа 2: IsLeaf = true, поэтому template = ItemTemplate

Группа 3: IsLeaf = false, поэтому template = GroupTemplate

И как только свойство IsLeaf группы 1 изменяется на true, шаблон должен автоматически измениться на ItemTemplate.

РЕДАКТИРОВАТЬ:

Вот мое временное решение. Есть ли лучший способ сделать это?

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