WPF 中带有组合框的转换器

本文关键字:转换器 组合 WPF | 更新日期: 2023-09-27 18:33:11

假设我有一个类,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; }
}

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

如何使用网格内

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

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

WPF 中带有组合框的转换器

创建另一个表示国家/地区和城市集合的属性。

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>

将所有控件放在此处。"国家/地区"表示整个集合,而"选定项目"表示单个项目。

您可以使用 INotifyProperty 为您的国家/地区 ID 实现属性更改通知,以便您可以相应地填充城市。

编辑

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

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

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

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

class Country_CityViewModel
{
    public CountriesListModel { get; set; }
    public CitiesListModel { get; set; }
    public Country-CityViewModel()
    {
        CountriestListModel = new CountriestListModel ;
        CitiesListModel = new CitiesListModel ();
    }
}

通过绑定或代码隐藏来分配视图模型。

假设您为页面分配了数据,并为页面指定了 x:name 的 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" />

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