WPF ListBox ItemsSource StaticResource / Question obligatoire
-
10-07-2019 - |
Question
Étant donné le code suivant:
<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>
Dans cet exemple, le
<ListBox ItemsSource="{StaticResource myCol}" />
Donne-moi une erreur en me plaignant qu'il ne peut pas se lier à un "CollectionViewSource". objet.
Mais l'autre listbox:
<ListBox ItemsSource="{Binding Source={StaticResource myCol}}" />
lie parfaitement bien.
Ma question est donc la suivante: pourquoi l’un travaille-t-il et pas l’autre? A la fin, les deux sources ItenSources ne sont-elles pas définies sur le même " CollectionViewSource " objet?
Merci.
La solution
La propriété ItemsSource est de type IEnumerable. Un CollectionViewSource n'est pas un IEnumerable. La propriété View de CollectionViewSource vous donnera un IEnumerable.
Lorsque vous vous liez à un CollectionViewSource, la liaison est suffisamment intelligente pour saisir la propriété View et la lier à celle-ci. Peut-être que CollectionViewSource a un [DefaultBindingProperty] dessus.
Cela revient au fait que lorsque vous parcourez la liaison, vous ne vous liez pas à CollectionViewSource, mais à sa propriété View.