2013-09-29 29 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" /> 

这捣碎我的头有点......但试试这个逻辑。我认为它会起作用。