2010-01-29 1 views
1

Я пытаюсь решить эту проблему уже более часа и не могу понять. Надеюсь, кто-то может понять, что я делаю неправильно.XamlParseException при привязке ComboBox к статически определенному массиву в XAML

У меня есть два отдельных проекта, оба из которых заполняют combobox с массивом парных разрядов в разделе UserControl.Resources, а затем привязываются к нему в графическом интерфейсе. То, что я делаю, - это просто то, что отлично работает в kaxaml и в одном из моих двух проектов.

<Page> 
    <Page.Resources> 
    <x:Array x:Key="Increments" Type="sys:Double"> 
     <sys:Double>0.01</sys:Double> 
     <sys:Double>0.02</sys:Double> 
     <sys:Double>0.03</sys:Double> 
     <sys:Double>0.04</sys:Double> 
    </x:Array> 
    </Page.Resources> 

    <Grid> 
    <ComboBox ItemsSource="{StaticResource Increments}" /> 
    </Grid> 
</Page> 

Другой проект дает мне следующую ошибку:

Cannot convert the value in attribute 'ItemsSource' to object of type 'System.Collections.IEnumerable'. 'System.Windows.Markup.ArrayExtension' is not a valid value for property 'ItemsSource'. Error at object 'System.Windows.Controls.ComboBox' in markup file ...

Я не могу понять, почему это происходит. Я попытался посмотреть схемы, указанные в обоих файлах XAML, но они одинаковы ... У меня нет никаких ошибок или сообщений в окне «Вывод». Я отчаялся и проверил его через FxCop, чтобы узнать, не поймает ли он что-то связанное, и хотя он обнаружил несколько допустимых ошибок, ни одна из них не была связана.

+0

Silverlight или WPF? Это компилируется и работает отлично для меня. –

+0

WPF - спасибо, я добавил тег. Итак, интересно то, что я нашел еще одну запись здесь на SO только минуту назад: http://stackoverflow.com/questions/703510/exception-thrown-when-resources-declaration-order-changed. В нем говорится об изменении порядка декларации в элементе «Ресурсы». Поэтому я сделал это, и теперь у меня другая ошибка, связанная с моим строковым форматированием. WTH? – Dave

+0

Думаю, нам нужно увидеть больше кода - как я уже сказал, ваш образец скомпилирован и отлично работает для меня. VS2008, .NET 3.5 SP1, WPF. –

ответ

2

мне пришлось обернуть это в ObjectDataProvider, чтобы заставить его работать, и заменить StaticResource с привязкой к StaticResource:

<!-- Resources --> 
<ObjectDataProvider x:Key="Incs2"> 
    <ObjectDataProvider.ObjectInstance> 
    <x:Array Type="sys:Double"> 
     <sys:Double>0.01</sys:Double> 
     <sys:Double>0.02</sys:Double> 
     <sys:Double>0.03</sys:Double> 
     <sys:Double>0.04</sys:Double> 
    </x:Array> 
    </ObjectDataProvider.ObjectInstance> 
</ObjectDataProvider> 

<!-- Page content --> 
<ComboBox ItemsSource="{Binding Source={StaticResource Incs2}}" /> 

EDIT: Я также обнаружил, что если я двигаю x:Array ресурс в верхней части моего раздела ресурсов, перед любым другим объявлением ресурса, я могу использовать ваш оригинал ItemsSource="{StaticResource ...}", и я больше не получаю исключение (или нужен ObjectDataProvider). Это, кажется, ошибка в WPF.

+0

Я использую VS2008, .NET 3.5 SP1. – Dave

+0

Я дам этот снимок завтра, когда мне нужно вернуть мой фортетера, спасибо! – Dave

+0

У вас есть хорошие ссылки, которые обсуждаются, когда вы должны использовать ItemsSource = "{StaticResource Incs2}" против ItemsSource = "{Binding Source = {StaticResource Incs2}}"? Эта разметка сейчас очень чужда мне. – Dave