簡體   English   中英

WPF中帶有組合框的轉換器

[英]Converter with Combobox in 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; }
}

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

如何使用在網格內具有組合框的轉換器在網格內的另一個組合框中基於所選國家/地區顯示該組合框中的城市,並顯示CityName,其中我有一個包含轉換器中Name屬性的City Class數組?

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

創建另一個代表“國家和城市”集合的屬性。

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實現屬性更改的通知,以便可以相應地填充城市。

編輯

您需要具有一個地址集合,並將該集合傳遞到網格的ItemsSource。

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

單行將代表單個Address對象。

使用兩組數據創建一個視圖模型,即:

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

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

通過綁定或后面的代碼分配viewmodel。

假設您為頁面分配了數據,並為頁面指定了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" />

這讓我有點頭暈……但是嘗試這種邏輯。 我認為它將起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM