0

假设我有一堂课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,其中我有一个城市类数组,其中包含转换器中的 Name 属性?

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

4

2 回答 2

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>

将所有控件放在这里。Country 代表整个集合,而 selectedItem 代表单个项目。

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

编辑

您需要有一个地址集合并将该集合传递给网格的 ItemsSource。

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

单行将代表单个地址对象。

于 2013-09-29T20:53:30.513 回答
0

用两组数据创建一个视图模型,即:

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

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

通过绑定或后面的代码分配视图模型。

假设您将数据分配给页面并为页面提供 CountryDetailsPage 的 x:name:

<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" />

这让我有点头晕......但试试这个逻辑。我认为它会起作用。

于 2013-09-29T21:22:07.130 回答