XamlParseException при привязке данных ComboBox к статически определенному массиву в XAML - PullRequest
1 голос
/ 29 января 2010

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

У меня есть два отдельных проекта, каждый из которых заполняет комбинированный список массивом типа Double в разделе 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>

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

Невозможно преобразовать значение в атрибут ItemsSource для объекта типа 'System.Collections.IEnumerable. 'System.Windows.Markup.ArrayExtension' не является допустимым значением для свойства 'ItemsSource'. Ошибка на объекте 'System.Windows.Controls.ComboBox' в файл разметки ...

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

1 Ответ

2 голосов
/ 29 января 2010

Мне пришлось обернуть это в 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}}" />

РЕДАКТИРОВАТЬ: Я также обнаружил, что если я переместу ресурс x:Array в начало моего раздела ресурсов, перед любым другим объявлением ресурса , я могу использовать ваш оригинальный ItemsSource="{StaticResource ...}" и я больше не получаю исключение (или мне нужен ObjectDataProvider). Это может показаться ошибкой в ​​WPF.

...