2012-10-13 50 views
0

我有兩個組合框,其中Parent必須顯示國家列表,而且子組合必須顯示所選國家/地區的城市列表。 數據存儲在名稱爲CountriesCitiesListDictionary<Int32, List<String>>中。 我有下面的代碼2個組合框之間的WPF主數據/詳細數據綁定

<ComboBox x:Name="cbCountriesList" 
    DataContext="{Binding CountriesCitiesList}" 
    IsSynchronizedWithCurrentItem="true"> 
</ComboBox> 

<ComboBox x:Name="cbCitiesList" VirtualizingStackPanel.IsVirtualizing="True"     
      ItemsSource="{Binding CountriesCitiesList}" 
      IsSynchronizedWithCurrentItem="true"> 
</ComboBox> 

的問題是,在城市組合I不能顯示所選擇的國家的城市名單。我覺得缺少最後一步。

回答

6

如果你的字典CountriesCitiesList包含國家ID爲重點和列表作爲城市的名字,你可以綁定它在純XAML的方式是這樣的 -

<ComboBox x:Name="cbCountriesList" 
      ItemsSource="{Binding CountriesCitiesList}" 
      IsSynchronizedWithCurrentItem="True"> 
    <ComboBox.ItemTemplate> 
     <DataTemplate> 
     <TextBlock Text="{Binding Key}"/> 
     </DataTemplate> 
    </ComboBox.ItemTemplate> 
</ComboBox> 
<ComboBox x:Name="cbCitiesList" 
      ItemsSource="{Binding SelectedItem.Value, ElementName=cbCountriesList}" 
      IsSynchronizedWithCurrentItem="True"/> 

我假設你想顯示在cbCountriesList國家ID的,因爲你是它結合與柯詞典y的int類型。

0

父組合框,綁定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}" /> 

側面說明:你會注意到,我特意加入了的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"); 
} 
0

---------------------------- MASTER ----------------- --------

<ComboBox x:Name="CityCB" ItemsSource="{Binding CitiesList}" DisplayMemberPath="CITYNAME" IsSynchronizedWithCurrentItem="True"/> 

----------------------------細節------ -------------------

<ComboBox x:Name="RegionCB" ItemsSource="{Binding SelectedItem.REGIONS, ElementName=CityCB}" DisplayMemberPath="REGIONNAME" IsSynchronizedWithCurrentItem="True"/> 

在這個例子中,我正在說明城市和它所包含的地區之間的主 - 細節。