2013-09-29 46 views
0

比方說,我有一個類,address轉換器組合框在WPF

public partial class Address 
{ 
    public int Id { get; set; } 
    public Nullable<int> CountryId { get; set; } 
    public Nullable<int> CityId { get; set; } 
    public string Details { get; set; } 
    public Nullable<bool> IsDefault { get; set; } 
    public Nullable<int> PersonId { get; set; } 
} 

每一行的城市組合框需要不同的值。例如,一排需要「巴黎,馬賽」,第二個需要「阿布扎比,迪拜,沙迦」,第三個需要「倫敦,諾丁漢」。

如何使用一個轉換器的組合框格內,以顯示在網格內的另一個組合框的基礎上選定的國家在組合框中城市和顯示CITYNAME 在那裏我有市級的數組,它包含名稱屬性的轉換器?

我需要知道的語法。如何使用countryID將其傳遞給轉換器以獲取城市列表並將其綁定到DataGrid中的CityCombobox並更改國家/地區此列表根據所選國家/地區進行更新?

回答

0

創建另一個屬性,代表國家和城市收藏。

public partial class Address 
{ 
    public int Id { get; set; } 
    public ObservableCollection<Country> Countries{get;set;} 
    public Nullable<int> CountryId { get; set; } 
    public ObservableCollection<City> Cities{get;set;} 
    public Nullable<int> CityId { get; set; } 
    public string Details { get; set; } 
    public Nullable<bool> IsDefault { get; set; } 
    public Nullable<int> PersonId { get; set; } 
} 

現在你有兩個集合,代表國家和城市。

<DataTemplate> 
<ComboBox ItemsSource="{Binding Countries}" SelectedItem = "{Binding CountryId}" /> 
</DataTemplate> 

將所有的控件放在這裏。這些國家表示整個集合,而selectedItem代表單個項目。

您可以使用INotifyProperty爲您的CountryId實現propertychanged通知,以便您可以相應地填充城市。

編輯

你需要有地址的集合,該集合傳遞給電網的的ItemsSource。

ObservableCollection<Address> = new ObservableCollection<Address>(); 
//Load Addresses for each entity 
//and show it as ItemsSource of the Grid. 

單行代表單個地址對象。

+0

我已經做到了這一點,但我發現所有行綁定到同一個城市observablecollection所以與所選國家Filtring所有組合框都過濾到所選國家,這是錯誤的,我已經搜查,我發現,轉換器可能會幫助我但我不知道如何使用它在我的情況下 –

+0

我的意思是你的答案將工作,如果兩個組合框不在網格中,但在網格內,它不工作正確,因爲我需要使每個行中的每個城市的每個組合框綁定到一個不同的城市列表取決於同一行上的selectedCountry –

+0

是的,實際上我認爲您將相同的城市和國家集合傳遞給每個對象。當您爲特定國家過濾城市時,只將該集合傳遞給該集合。順便說一下,表示網格的唯一行的實際對象應該也是一個集合... – abhishek

0

創建兩組數據的視圖模型,即:

class Country_CityViewModel 
{ 
    public CountriesListModel { get; set; } 
    public CitiesListModel { get; set; } 

    public Country-CityViewModel() 
    { 
     CountriestListModel = new CountriestListModel ; 
     CitiesListModel = new CitiesListModel(); 
    } 
} 

分配視圖模型通過結合或代碼後面。

假設你指定的數據到頁面,給頁面的​​x:名稱CountryDetailsPage的:

<ComboBox x:name:"CountryDetails" 
      DataContext="{Binding DataContext, ElementName=CountryDetailsPage}" 
      ItemsSource="{Binding CountriesListModel.Countries}" 
      DisplayMemberPath="Country" 
      SelectedValue="{Binding Country.id, , Mode=TwoWay}" 
      SelectedValuePath="id" /> 

<ComboBox DataContext="{Binding DataContext, ElementName=CountryDetails}" 
      ItemsSource="{Binding SelectedItem Source=CountryDetails}" 
      DisplayMemberPath="City" 
      SelectedValue="{Binding CitiesListModel.id, Mode=TwoWay}" 
      SelectedValuePath="CountriesListModel.id" /> 

這搗碎我的頭有點......但試試這個邏輯。我認爲它會起作用。