0

私は私の別の質問(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 : インデックスが変更されるのはなぜですか?

4

1 に答える 1