CodeProject の記事の簡単なアプリケーションを作成しました (完全な記事はこちら。この質問のソース コードは、ここから直接ダウンロードできます)。
これは、単純なオブジェクト (3 つのプロパティ: 2 つの文字列、1 つの int) を持つ ListBox を持つ非常に単純なウィンドウです。
public class MyShape
{
public string ShapeType { get; set; }
public string ShapeColor { get; set; }
public int ShapeSides { get; set; }
}
ユーザーがコンボボックスからプロパティを選択し、現在のラベルSelectedValuePath
を表示できるように、コード ビハインドで を設定しています。SelectedValue
ComboBox は次のタイプのオブジェクトに設定されます。
public class PropertyObject
{
public string PropertyName { get; set; }
public string PropertyType { get; set; }
}
どちらのプロパティも文字列であるため、 の入力として有効である必要がありますSelectedValuePath
。
私は次のように値を設定しています:
private void ShapeClassPropertiesCmbx_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
ComboBox cmbx = (ComboBox)sender;
PropertyObject prop_ob = ((PropertyObject)cmbx.SelectedItem);
string name = prop_ob.PropertyName;
var item_index = SourceListBox.SelectedIndex;
//SourceListBox.SelectedValuePath = null; // without this, we get a null exceptions when going from string to int properties for some reason.
SourceListBox.SelectedValuePath = name;
SourceListBox.SelectedIndex = item_index;
}
(コードをダウンロードすると、MainWindow.xaml.cs の 79 行目になります)。
string
選択した値を aから anに変更すると、例外が発生しint
ます。混乱を避けるために、どちらもstring
表示するプロパティを表しています。
エラーを再現するには、79 行目をコメントアウトします。デモを実行します。
- SelectedValuePath コンボボックス (2 つ目) の最初の 2 つの文字列プロパティのいずれかを選択します。
- リストボックスの選択を変更します (
SelectedValue
それに応じて変更が表示されます) 。 - 2 番目のコンボボックスの選択を int プロパティ (実際には文字列表現) に変更します。「入力文字列が正しい形式ではありませんでした」というエラーとともに例外がスローされます。
奇妙なことに、手順を繰り返しても、最初に int プロパティを選択すると、正常に動作します。その場合、文字列に変更しても問題なく動作します。int に戻ると、例外がスローされます。
を設定するSelectedValuePath
前に null に設定すると、問題が解決するようです。あなたの例外がスローされる理由と問題は何ですか?
編集:これは、より多くのプロパティタイプを備えた新しいデモです。また、どのエラーがスローされたかを示し、次を追跡しSelectedIndex
ます: Download new demo。