ComboBoxのItemsSource
は、ViewModel内の項目のリストにバインドされ、SelectedItem
はプロパティにバインドされています。別のリストにバインドされている別のComboBoxもありますが、代わりにSelectedIndex
が使用されます。最初のコンボボックスからアイテムを選択すると、コンボボックスの秒の内容が変更され、SelectedIndex
にバインドされたプロパティは-1
に設定され、コンボボックスでは何も選択されません。ComboBoxでSelectedIndexをリセットするキャリバー
なぜSelectedIndex
プロパティが-1にリセットされていますか?それを防止するにはどうすればよいですか?
ビュー
<ComboBox ItemsSource="{Binding MyList}" SelectedItem="{Binding MySelectedItem}"></ComboBox>
<ComboBox ItemsSource="{Binding MyArray}" SelectedIndex="{Binding MySelectedIndex}"></ComboBox>
のViewModel
public List<Foo> MyList { get; set; }
private Foo _mySelectedItem;
public Foo MySelectedItem {
get { return _mySelectedItem; }
set {
if (Equals(value, _mySelectedItem)) return;
_mySelectedItem = value;
NotifyOfPropertyChange();
MyArray = new [] { "othervalue1", "othervalue2", "othervalue3" };
NotifyOfPropertychange(() => MyArray);
}
}
public string[] MyArray { get; set; }
public int MySelectedIndex { get; set; }
public MyViewModel() {
MyList = new List<Foo> { new Foo(), new Foo(), new Foo() };
MySelectedItem = MyList.First();
MyArray = new [] { "value1", "value2", "value3" };
MySelectedIndex = 1; // "value2"
NotifyOfPropertyChange(() => MyList);
}
ですから、MYLISTにバインドされたコンボボックスから何かを選択すると、MyArrayという、新しい値を使用して構築されます。これにより、新しい配列に同じインデックスが存在していても、MySelectedIndexは突然値-1
になります。
@dymanoidを。今すぐ修正しました。それを指摘してくれてありがとう。 – GTHvidsten