WPF مربع القائمة ItemsSource StaticResource / سؤال ملزم
-
10-07-2019 - |
سؤال
ونظرا لالبرمجية التالية:
<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، ولكن خاصية عرض لها.