2009-03-31 10 views
1

je reçois exception lorsque les ressources racontons dans cet ordre:Exception levée lorsque l'ordre de déclaration des ressources a changé

<Window.Resources> 
    <sys:Object x:Key="resourceA"></sys:Object> 

    <x:Array x:Key="resourceB" Type="sys:String"> 
     <sys:String>foo</sys:String> 
    </x:Array> 
</Window.Resources> 

et quand déclarer cette façon, tous les travaux:

<Window.Resources> 
    <x:Array x:Key="resourceB" Type="sys:String"> 
     <sys:String>foo</sys:String> 
    </x:Array> 

    <sys:Object x:Key="resourceA"></sys:Object> 
</Window.Resources> 

Exception levée est:

Impossible de convertir la valeur dans l'attribut 'ItemsSource' à l'objet du type 'System.Collections.IEnumerable'. 'System.Windows.Markup.ArrayExtension' n'est pas une valeur valide pour la propriété 'ItemsSource'. Erreur à l'objet 'System.Windows.Controls.ComboBox' dans fichier de balisage 'WpfResourcesBug, composant/Window1.xaml' ligne 18 Position 37.

code complet:

<Window x:Class="WpfResourcesBug.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:sys="clr-namespace:System;assembly=mscorlib" 
    Title="Window1" Height="300" Width="300"> 

    <Window.Resources> 
     <sys:Object x:Key="resourceA"></sys:Object> 

     <x:Array x:Key="resourceB" Type="sys:String"> 
      <sys:String>foo</sys:String> 
     </x:Array> 
    </Window.Resources> 

    <StackPanel> 
     <ComboBox SelectedIndex="0" ItemsSource="{StaticResource resourceB}" /> 
    </StackPanel> 
</Window> 

Répondre

2

I pense que vous pourriez trouver une solution possible here

+0

J'ai essayé {Binding Source = {Ressource StaticResourceB}}, mais je n'ai obtenu aucun élément dans la liste déroulante. L'exception n'est pas levée, mais le problème n'est pas résolu. Et encore une fois, si l'ordre de déclaration des ressources a changé, cela fonctionne bien dans les deux cas. – alex2k8

+0

Je pense que cela revient à l'Array n'étant pas résolu en une collection énumérable. Fondamentalement, c'est d'où provient votre message d'erreur précédent. Avez-vous pensé à utiliser l'approche ObjectDataProvider? Quelque chose comme http://www.codeproject.com/KB/WPF/FillComboboxWSortedEnum.aspx – bioskope

+0

Si nous supprimons simplement resourceA, le tableau a été résolu avec succès en une collection énumérable. Le problème est donc non dans Array lui-même, mais dans resourceA, et même dans l'ordre de déclaration. C'est ce qui ne fait pas de différence pour moi. – alex2k8

Questions connexes