WPF: Como definir uma CollectionViewSource num DataTemplate

Se querem definir uma CollectionViewSource num DataTemplate, não podem colocá-la directamente no próprio DataTemplate, mas antes num dos seus descendentes.

A razão para tal é que o DataTemplate em si não se torna parte da árvore visual e não tem DataContext.

É necessário definir o recurso no âmbito de um dos seus elementos, por exemplo:

<DataTemplate x:Key="PeopleTemplate">
    <StackPanel>
        <StackPanel.Resources>
            <!-- Source -->
            <CollectionViewSource x:Key="PeopleViewSource" Source="{Binding People}">
                <CollectionViewSource.SortDescriptions>
                    <scm:SortDescription PropertyName="Name" Direction="Ascending" />
                </CollectionViewSource.SortDescriptions>
            </CollectionViewSource>
        </StackPanel.Resources>
        <!-- Control -->
        <ListView ItemsSource="{Binding Source={StaticResource PeopleViewSource}}" />
    </StackPanel>
</DataTemplate>

Artigos relacionados