Frage

Bei dem folgenden Code:

<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 diesem Beispiel wird die

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

Gibt mir einen Fehler beschweren, dass es nicht zu einem „Collection“ Objekt binden kann.

Aber die andere Listbox:

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

bindet völlig in Ordnung.

Also meine Frage ist, warum tut man Arbeit und der andere nicht? Am Ende werden nicht beide ItenSources auf das gleiche „Collection“ Objekt gesetzt werden?

Danke.

War es hilfreich?

Lösung

Die Itemssource-Eigenschaft ist vom Typ IEnumerable. Ein Collection ist kein IEnumerable. Collection anzeigen Eigenschaft geben Ihnen einen IEnumerable.

Wenn Sie eine Collection binden die Bindung intelligent genug, um die Eigenschaft Ansicht greifen und tatsächlich, dass zu binden. Vielleicht hat ein Collection [DefaultBindingProperty] auf sie.

Es läuft darauf hinaus auf die Tatsache, dass, wenn Sie die Bindung durch Sie tatsächlich an die Collection nicht binden, aber die Eigenschaft Ansicht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top