Domanda

Dato il seguente codice:

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

In questo esempio,

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

Mi dà un errore lamentandomi che non può essere associato a un " CollectionViewSource " oggetto.

Ma l'altra casella di riepilogo:

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

si lega perfettamente.

Quindi la mia domanda è: perché uno funziona e l'altro no? Alla fine, entrambe le ItenSource non sono impostate sullo stesso " CollectionViewSource " obiettare?

Grazie.

È stato utile?

Soluzione

La proprietà ItemsSource è di tipo IEnumerable. Un CollectionViewSource non è un IEnumerable. La proprietà View di CollectionViewSource ti darà un IEnumerable.

Quando si esegue il binding a una CollectionViewSource, il binding è abbastanza intelligente da afferrare la proprietà View e in realtà associarsi a quello. Forse CollectionViewSource ha un [DefaultBindingProperty] su di esso.

Si riduce al fatto che quando si passa attraverso il Binding in realtà non si lega a CollectionViewSource, ma alla sua proprietà View.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top