XAML で静的に定義された配列に ComboBox をデータバインドするときに XamlParseException が発生する

StackOverflow https://stackoverflow.com/questions/2159499

質問

1時間以上この問題を解決しようとしていますが、解決できません。誰かが私が間違っていることを理解できることを願っています。

2 つの別々のプロジェクトがあり、両方とも UserControl.Resources セクションの Double の配列をコンボボックスに設定し、GUI でそれにデータバインドします。私がやっていることは基本的にこれだけであり、kaxaml と私の 2 つのプロジェクトのうちの 1 つでは正常に動作します。

<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'は、プロパティ 'itemsource'の有効な値ではありません。Object 'system.windows.controls.combobox'でマークアップファイルでエラー...

なぜこれが起こっているのか理解できません。両方の XAML ファイルで参照されているスキーマを調べてみましたが、それらは同じです...[出力] ウィンドウにエラーやメッセージは表示されません。私は必死になって FxCop を実行して、関連するものが見つかるかどうかを確認しました。いくつかの有効なエラーが見つかりましたが、どれも関連していませんでした。

役に立ちましたか?

解決

これを機能させるには、これを 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 のバグであると思われます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top