私は私の別の質問(here)を解決しようとしていますが、コード内の変更の内部に行き詰まっていSelectedValuePath
ます。
私が何から/何に変わるかによって、さまざまなことが起こるようです。私はSOを調査し、デバッグし、dotPeekを使用してMS dllの問題のあるコードを見つけようとしましたが、これまでのところ役に立ちませんでした。
どのタイプのプロパティから文字列プロパティに変更しても、問題なく動作します。
string から int に変更すると、例外がスローされます。
bool から int への変更は、以下によって異なります。
- プロパティが false の場合、選択されたインデックスは 0 に変更され、選択された値は false に変更されます (本来の int ではありません)。
- プロパティが true の場合、選択されたインデックスは -1 に変更され、選択された値は null になります。
私の推測では、どこかで誰かが何かを解析しようとしており、何が起こるかによって、結果がうまくいくかどうかが決まるということです。
SelectedValuePath
文字列を入力として受け取り、文字列が指している対象に を設定するだけですSelectedValue
。これを変更してSelectedItem
も は変わらず、正しい値が表示されると思います。この無数の異なる結果/例外/動作が得られるとは思っていませんでした...
頭に浮かぶ唯一のことは、のタイプがSelectedValue
、プロパティがSelectedValuePath
指すものに設定され、それが変更されると、間違ったタイプに遭遇する可能性があるということです...
回避策として、SelectedValuePath
新しいプロパティに設定する前に を null に設定するとうまくいくようです (例外がスローされるのを回避します)。
編集:
プロジェクトを更新して、いくつかのタイプを追加しました。ここで見つけることができます。問題のあるビットは Try/Catch ブロックにあり、奇妙なことが起こるたびに追加情報が表示されます。
質問1:私を困惑させる動作は次のとおりです。文字列から他のタイプに変更すると(アイテムを選択すると)、例外がスローされ、SelectedValue
変更されなくなります(デフォルトに設定すると、この問題が修正されます)。
なぜSystem.FormatException: Input string was not in a correct format
スローされ、何が変更されたのですか?? (意志を変更するだけで、新しいオブジェクト/タイプにSelectedValuePath
「リセット」されると予想していました)SelectedValue
また、 を変更するSelectedValuePath
と、ほとんどの場合 SelectedIndex が -1 または 0 にリセットされます
。質問 2 : インデックスが変更されるのはなぜですか?