1

我一直在尝试解决这个问题一个多小时,但无法弄清楚。希望有人能看到我做错了什么。

我有两个单独的项目,它们都在 UserControl.Resources 部分中使用 Doubles 数组填充组合框,然后在 GUI 中对其进行数据绑定。我所做的基本上就是这个,它在 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 运行它,看看它是否会捕获相关的东西,虽然它已经捕获了几个有效的错误,但没有一个是相关的。

4

1 回答 1

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}}" />

编辑:我还发现,如果我将x:Array资源移动到资源部分的顶部,在任何其他资源声明之前,我可以使用您的原始资源,ItemsSource="{StaticResource ...}"并且不再出现异常(或需要 ObjectDataProvider)。这似乎是 WPF 中的一个错误。

于 2010-01-29T02:36:38.673 回答