XAML で静的に定義された配列に ComboBox をデータバインドするときに XamlParseException が発生する
-
23-09-2019 - |
質問
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 のバグであると思われます。