Question

Étant donné le code suivant:

<Window x:Class="WpfApplication76.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:col="clr-namespace:System.Collections;assembly=mscorlib"
    Title="Window1" Height="300" Width="300">

    <Window.Resources>
        <CollectionViewSource x:Key="myCol">
            <CollectionViewSource.Source>
                <col:ArrayList>
                    <ListBoxItem>Uno</ListBoxItem>
                    <ListBoxItem>Dos</ListBoxItem>
                    <ListBoxItem>Tres</ListBoxItem>
                </col:ArrayList>
            </CollectionViewSource.Source>
        </CollectionViewSource>
    </Window.Resources>

    <Grid>
        <ListBox ItemsSource="{StaticResource myCol}" />
        <ListBox ItemsSource="{Binding Source={StaticResource myCol}}" />
    </Grid>

</Window>

Dans cet exemple, le

<ListBox ItemsSource="{StaticResource myCol}" />

Donne-moi une erreur en me plaignant qu'il ne peut pas se lier à un "CollectionViewSource". objet.

Mais l'autre listbox:

<ListBox ItemsSource="{Binding Source={StaticResource myCol}}" />

lie parfaitement bien.

Ma question est donc la suivante: pourquoi l’un travaille-t-il et pas l’autre? A la fin, les deux sources ItenSources ne sont-elles pas définies sur le même " CollectionViewSource " objet?

Merci.

Était-ce utile?

La solution

La propriété ItemsSource est de type IEnumerable. Un CollectionViewSource n'est pas un IEnumerable. La propriété View de CollectionViewSource vous donnera un IEnumerable.

Lorsque vous vous liez à un CollectionViewSource, la liaison est suffisamment intelligente pour saisir la propriété View et la lier à celle-ci. Peut-être que CollectionViewSource a un [DefaultBindingProperty] dessus.

Cela revient au fait que lorsque vous parcourez la liaison, vous ne vous liez pas à CollectionViewSource, mais à sa propriété View.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top