绑定单个列表中的多个下拉列表

时间:2015-12-13 16:08:24

标签: c# asp.net-mvc linq

在MVC中,我有一个List<CityModel>,其中包含CityID,City,StateID,State,CountryID,Country。通过使用以下代码,我可以获得引用列表:

IEnumerable<SelectListItem> objCityList;
IEnumerable<SelectListItem> objStateList;
IEnumerable<SelectListItem> objCountryList;
using (CityModel objCityModel = new CityModel())
{
  List<CityModel> cityList =  objCityModel.getCityList();
  objCityList = cityList.AsEnumerable().Select(m => new SelectListItem() {
                    Text = m.City,
                    Value = Convert.ToString(m.CityID)
                });
}

如何从cityList

绑定不同的州和国家/地区?

2 个答案:

答案 0 :(得分:0)

您只需使用一个列表,但更改组合框中显示的属性。所选项目与列表中的对象类型相同。

在视图模型中,只显示CityList属性,然后将组合框ItemsSource绑定到该属性。

你可以在XAML中完成所有这些,例如:

<ComboBox ItemsSource="{Binding CityList}"
         DisplayMemberPath="City"
         SelectedItem={Binding SelectedCity, Mode=TwoWay>
</ComboBox>

<ComboBox ItemsSource="{Binding CityList}"
         DisplayMemberPath="County"
         SelectedItem={Binding SelectedCounty, Mode=TwoWay>
</ComboBox>

<ComboBox ItemsSource="{Binding CityList}"
         DisplayMemberPath="State"
         SelectedItem={Binding SelectedState, Mode=TwoWay>
</ComboBox>

答案 1 :(得分:0)

据我了解,您想从“城市”列表中提取州和国家/地区列表。要做到这一点,你可以使用这样的东西

objStateList = cityList.GroupBy(item => item.StateID, (key, items) => new SelectListItem
{
    Text = items.First().State,
    Value = Convert.ToString(key)
});
objCountryList = cityList.GroupBy(item => item.CountryID, (key, items) => new SelectListItem
{
    Text = items.First().Country,
    Value = Convert.ToString(key)
});