メインページにComboBoxを備えたWPFアプリ(XBAP)があります。 ComboBoxで項目を選択すると、イベントハンドラーがリストボックスのデータソースであるコレクションを再構築します。非常に単純なもののようです。これまでにWPFで行ったことはすべてあります。
リストからアイテムを選択した後のドロップダウンは次のようになります。
赤い境界線はいったいどこから来たのですか?フォームを最初から作成しています。現在、スタイリングなどはありません。 「赤」というテキストは、プロジェクトのどこにも言及されていません。一度表示されると消えることはなく、コントロールの上に置いたものの上に表示されます。
マークアップは次のとおりです。
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Converter={StaticResource ResourceKey=DeviceInfoNameConverter}}"></TextBlock>
</DataTemplate>
</ComboBox.ItemTemplate>
詳細:
検索からこれまでのところ私の唯一の推測は、コントロールに適用されているある種のデフォルトのエラーテンプレートがあるということです。私はWIAを使用していますが、VS出力ウィンドウに表示されるいくつかのCOM例外があり、明らかにListViewのデータバインディングに関連しています。コントロールへのデータソースはWIA.DeviceInfoオブジェクトであり、コンバーターはドロップダウンテキストのnameプロパティを取得しているだけです。
decimal
オブジェクトのリストにバインドしたときに、この「不思議な赤いボックス」がありましたが、MVVMプロパティタイプはint
でした。 SelectedValue
、DisplayMemberPath
、およびSelectedValuePath
のすべてのプロパティを使用している場合は、それらを確認して再確認します。また、SelectedValue
を使用していないことを確認してください。 SelectedItem
を使用するつもりでした。
デバッグコンソールで、次のようなバインディングエラーを探します。
System.NotSupportedException: Int32Converter cannot convert from System.Decimal
System.Windows.Data Error: 7 : ConvertBack cannot convert value '7' (type 'Decimal'). BindingExpression:Path=SharedProductHistoryFilterCriteria.FilterDays; DataItem='PricingManagerViewModel' (HashCode=19425465); target element is 'ComboBox' (Name=''); target property is 'SelectedValue' (type 'Object') NotSupportedException:'System.NotSupportedException: Int32Converter cannot convert from System.Decimal.
at MS.Internal.Data.DefaultValueConverter.ConvertHelper(Object o, Type destinationType, DependencyObject targetElement, CultureInfo culture, Boolean isForward)
at MS.Internal.Data.ObjectTargetConverter.ConvertBack(Object o, Type type, Object parameter, CultureInfo culture)
at System.Windows.Data.BindingExpression.ConvertBackHelper(IValueConverter converter, Object value, Type sourceType, Object parameter, CultureInfo culture)'
私も同じ問題を抱えていたので、SelectedItemとItemsSourceの両方のデータ型をdoubleに変更しました。以前はItemsSourceのintのリストとSelectedItemのdoubleのリストがありました。これは機能します。
単なる型キャストの問題のようです。私の場合、SelectedIndexはEnumタイプのプロパティにバインドされており、そのプロパティのセッターは呼び出されませんでした。コンバーターのConvertとConvertBackの両方で、戻り値を正しいタイプに明示的にキャストする必要がありました。
私も同じ問題を抱えていました。データの不一致であることが判明しました。コンボボックスで選択されたアイテムは文字列にマップされ、選択された値はバイトにマップされました。両方を文字列に変換すると、期待どおりに機能していました。