2009-03-31 5 views
1

я получаю исключение, когда объявления ресурсов в следующем порядке:Исключение брошено при заказе декларации ресурсы изменили

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

и когда заявляют таким образом, все работы:

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

Исключение брошено является:

Невозможно преобразовать значение в атрибут 'ItemsSource' к объекту типа 'System.Collections.IEnumerable. 'System.Windows.Markup.ArrayExtension' недействительное значение для свойства 'ItemsSource'. Ошибка в объекте 'System.Windows.Controls.ComboBox' в файле разметки 'WpfResourcesBug; компонент/Window1.xaml' Линия 18 Позиция 37.

Полный код:

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

ответ

2

I думаю, вы можете найти возможное решение. here

+0

Я пробовал {Binding Source = {StaticResource resourceB}}, но не получал никаких элементов в combobox. Исключение не выбрасывается, но проблема не решена. И снова, если порядок объявления ресурсов изменился, в обоих случаях он отлично работает. – alex2k8

+0

Я думаю, что это снова сводится к тому, что массив не разрешается в перечислимую коллекцию. В основном это то, откуда возникло ваше предыдущее сообщение об ошибке. Вы задумывались над тем, чтобы использовать подход ObjectDataProvider? Что-то вроде http://www.codeproject.com/KB/WPF/FillComboboxWSortedEnum.aspx – bioskope

+0

Если мы просто удалим resourceA, массив будет успешно разрешен в перечислимую коллекцию. Таким образом, проблема не в самом массиве, а в resourceA и даже в порядке объявления. Для меня это не имеет никакого значения. – alex2k8