親 ComboBox についてはSelectedItem
、モデルのプロパティにバインドします。
<ComboBox x:Name="cbCountriesList"
DataContext="{Binding CountriesCitiesList}"
IsSynchronizedWithCurrentItem="true"
ItemSource="{Binding}"
SelectedItem={Binding Path=SomePropertyOnModel} />
は、国リストの項目SomePropertyOnModel
と同じタイプです。
子 ComboBox の場合、すべてが同じである必要があります。
<ComboBox x:Name="cbCitiesList" VirtualizingStackPanel.IsVirtualizing="True"
ItemsSource="{Binding CountriesCitiesList}"
IsSynchronizedWithCurrentItem ="true"
ItemSource="{Binding}" />
補足: 両方の ComboBox に ItemsSource バインディングを具体的に追加したことに気付くでしょう。
モデルでは、 が設定されるたびに、受け取った値に基づいて をSomePropertyOnModel
更新します。つまり、次のようになります。CountriesCitiesList
private string _somePropertyOnModel;
public string SomePropertyOnModel
{
get { return _somePropertyOnModel; }
set
{
_somePropertyOnModel = value;
// call NotifyPropertyChanged
UpdateCountriesCitiesList();
}
}
private void UpdateCountriesCitiesList()
{
// set CountriesCitiesList based on the
// SomePropertyOnModel value
// CountriesCitiesList should be an ObservableCollection and the values
// should be cleared and then added.
CountriesCitiesList.Clear();
CountriesCitiesList.Add( "Springfield" );
}