Pergunta

Dado o seguinte código:

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

Neste exemplo, o

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

Dá-me um erro reclamando que não pode vincular a um objeto "CollectionViewSource".

Mas a outra caixa de listagem:

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

liga perfeitamente bem.

Então, minha pergunta é por isso que faz um trabalho e o outro não? No final, não são ambos ItenSources sendo definido para o mesmo objeto "CollectionViewSource"?

Obrigado.

Foi útil?

Solução

A propriedade ItemsSource é do tipo IEnumerable. A CollectionViewSource não é um IEnumerable. de CollectionViewSource Ver propriedade lhe dará uma IEnumerable.

Quando você vincular a um CollectionViewSource a ligação é inteligente o suficiente para agarrar a propriedade View e realmente se ligar a isso. Talvez CollectionViewSource tem um [DefaultBindingProperty] sobre ela.

Ela resume-se ao fato de que quando você vai através da ligação que você realmente não se ligar ao CollectionViewSource, mas a sua exibição propriedade.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top