سؤال

ونظرا لالبرمجية التالية:

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

في هذا المثال،

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

ويعطيني خطأ تشكو من أنه لا يمكن ربط كائن "CollectionViewSource".

ولكن مربع القائمة الأخرى:

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

ويربط ما يرام تماما.

وهكذا سؤالي هو: لماذا عمل واحد والآخر لا؟ في النهاية، وليس كلاهما ItenSources يتم تعيين إلى نفس الكائن "CollectionViewSource"؟

وشكرا لكم.

هل كانت مفيدة؟

المحلول

والخاصية ItemsSource من النوع IEnumerable. A CollectionViewSource ليست IEnumerable. سوف الملكية مشاهدة CollectionViewSource لتعطيك IEnumerable.

عند ربط إلى CollectionViewSource الربط ذكي بما فيه الكفاية للاستيلاء على ممتلكات عرض وربط فعلا لذلك. ربما CollectionViewSource لديه [DefaultBindingProperty] على ذلك.

وانها تتلخص في حقيقة أنه عندما تذهب من خلال ربط كنت لا تربط في الواقع إلى CollectionViewSource، ولكن خاصية عرض لها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top