これを行うには、いくつかの異なる方法があります。
1 :(最も簡単です!)最初のリストボックスのSelectedItemをViewModelにバインドします。ViewModelプロパティのセッターで、バインドするリストを2番目のリストボックスに変更します。ViewModelプロパティは、リストが変更されたことを通知するためにINotifyPropertyChangedを使用する必要があることに注意してください。
例:xamlが次のようになっている場合:
<ListBox ItemSource="{Binding ListOne}" SelectedItem="{Binding SelectedItem, Mode=TwoWay}"/>
<ListBox ItemSource="{Binding ListTwo}"/>
その場合、ViewModelは次のようになります。
public List<MyItem> ListOne { get; set; }
private MyItem _selectedItem
public MyItem SelectedItem
{
get { return _selectedItem; }
set
{
_selectedItem = value;
ListTwo = _selectedItem.SubItems;
}
}
private List<MyOtherItem> _listTwo
public List<MyOtherItem> ListTwo
{
get { return _listTwo; }
set
{
_listTwo = value;
RaisePropertyChanged("ListTwo");
}
}
2:2番目のリストのデータが文字通り最初のリストのアイテムのプロパティである場合、xamlのBindingを使用してそれらを直接結合できます。
ItemSource="{Binding Path=SelectedItem.MyItemsProperty, ElementName=MyFirstListBoxName}"
3:EventTriggerをEventToCommandとともに使用して、SelectedItemChangedイベントをコマンド実行に変えることができます。コマンドを文字通りListBoxItemにバインドしているのではなく、コマンドを変更にバインドしているのです。
最初のオプションをお勧めします。これは最も簡単で、複雑になりすぎずに何が起こっているかを適切に制御できます。