在WPF中使用Combobox转换器

时间:2013-09-29 20:44:34

标签: c# wpf

假设我有一个班级address

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; }
}

每行需要 Cities 组合框的不同值。例如,一排需要“巴黎,马赛”,第二排需要“阿布扎比,迪拜,沙迦”,第三排需要“伦敦,诺丁汉”。

如何在网格中使用带有组合框的转换器,根据网格内另一个组合框中的选定国家/地区显示该组合框中的城市并显示CityName 我有一个城市类数组,其中包含转换器中的名称属性?

我需要知道语法。如何使用countryID将其传递给转换器以获取城市列表并将其绑定到数据网格中的CityCombobox,以及更改国家/地区此列表是否根据所选国家/地区更新?

2 个答案:

答案 0 :(得分:0)

创建另一个表示Country和City集合的属性。

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>

将所有控件放在此处。 Countries表示整个集合,而selectedItem表示单个项目。

您可以使用INotifyProperty为您的CountryId实施propertychanged通知,以便您可以相应地填充城市。

编辑

您需要拥有一个Address集合并将该集合传递给Grid的ItemsSource。

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

单行将代表单个Address对象。

答案 1 :(得分:0)

使用两组数据创建一个viewmodel,即:

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

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

通过绑定或代码隐藏来分配viewmodel。

假设您已将数据分配给页面并为页面提供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" />

这让我抬起头来......但试试这个逻辑。我认为它会奏效。