【WPF】给下拉列表ComboBox绑定数据

思路:给ComboBox控件设置它的ItemSource绑定到ViewModel中的某个列表上,该列表是某个实体类的集合(如List< Person >),而ComboBox列表要显示的是该实体类的某一属性(如person.Name)。

大致步骤:

  • 联网获取到这组数据的Json,然后反序列化为对应的List< 实体类 >列表。
  • 由于只想要绑定这组实体类的Name属性,所以再准备一个List< string >集合,保存List< 实体类 >中的每一个对象的Name属性
  • 最后ComboBox的ItemSource绑定到这个List< string >集合即可。

前台绑定:

<ComboBox ItemsSource="{Binding CityName}"/>

ViewModel:

private List<City> cityList;    // 当前省份下所有城市的信息
public List<City> CityList
{
    get { return cityList; }
    set { SetProperty(ref cityList, value); }
}

private List<string> cityName;  // 前台下拉列表绑定当前省份下所有城市名
public List<string> CityName
{
    get { return cityName; }
    set { SetProperty(ref cityName, value); }
}

// 记得在ViewModel的构造函数中初始化这两个List列表
// ... InitList()...

public class City
{
    public int cityId { get; set; }
    public string cityName { get; set; }
}

Controller层:

// 联网获取城市/小区Json数据
private void GetCityAndCommunityJsonData()
{
    Dictionary<string, string> dic = new Dictionary<string, string>();
    dic.Add("provinceName", "广西壮族自治区"); // 暂时写死
    string request = GlobalVariable.GET_CITYS_BY_PROVINCE_TO_CLIENT;
    string json = NetworkUtils.Instance.HttpPostRequest(request, dic);
    System.Console.WriteLine("完成:获取城市/小区数据");

    Response<City> response = JsonConvert.DeserializeObject<Response<City>>(json);
    houseTypeViewModel.CityList.Clear();
    houseTypeViewModel.CityList = response.result;

    houseTypeViewModel.CityName.Clear();
    foreach (var item in houseTypeViewModel.CityList)
    {
        houseTypeViewModel.CityName.Add(item.cityName);
    }

}

联网工具类:

public string HttpPostRequest(string url, IDictionary<string, string> parameters)
{
    HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(GlobalVariable.SERVER_ADDRESS_TEMP + url);
    httpWebRequest.Method = "POST";
    httpWebRequest.ContentType = "application/x-www-form-urlencoded;charset=utf8";
    httpWebRequest.Timeout = 20000;

    // 参数
    if (!(parameters == null || parameters.Count == 0))
    {
        StringBuilder buffer = new StringBuilder();
        int i = 0;
        foreach (string key in parameters.Keys)
        {
            if (i > 0)
            {
                buffer.AppendFormat("&{0}={1}", key, parameters[key]);
            }
            else
            {
                buffer.AppendFormat("{0}={1}", key, parameters[key]);
            }
            i++;
        }
        // 给文本数据编码
        byte[] data = Encoding.UTF8.GetBytes(buffer.ToString());

        // 往请求的流里写数据
        using (Stream stream = httpWebRequest.GetRequestStream())
        {
            stream.Write(data, 0, data.Length);
        }
    }

    // 从响应对象中获取数据
    HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
    StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream(), Encoding.GetEncoding("UTF-8"));
    string responseContent = streamReader.ReadToEnd();

    streamReader.Close();
    httpWebResponse.Close();
    httpWebRequest.Abort();

    return responseContent;
}
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WPF的DataGridComboBoxColumn是一种用于数据网格控件的列类型,它可以显示ComboBox列表,并且可以使用Converter将不同的数据进行。 Converter是WPF中的一个重要概念,它可以在数据过程中进行值的转换。使用Converter可以帮助我们在ComboBox时,将不同的数据进行转换和展示。 使用Converter不同数据的步骤如下: 1. 首先,我们需要创建一个实现了IValueConverter接口的Converter类。这个Converter类负责将源数据转换为目标数据。例如,我们可以将一个int类型的数据转换为对应的字符串类型数据。 2. 接下来,在XAML文件中创建DataGridComboBoxColumn列,并设置Binding属性为对应的数据源。可以使用ItemsSource属性来ComboBox数据源,可以使用SelectedItemBinding属性来选中的项。同时,使用Converter属性将Converter类与该列的数据进行关联。 3. 在Converter类中,实现Convert方法和ConvertBack方法。Convert方法用于将源数据转换为目标数据,而ConvertBack方法则用于将目标数据转换回源数据。 通过上述步骤,我们就可以实现在DataGridComboBoxColumn列中使用Converter不同的数据。 总结起来,WPF的DataGridComboBoxColumn通过使用Converter可以实现将不同的数据进行和展示。使用Converter可以将源数据转换为目标数据,从而实现ComboBox数据数据项的转换。通过掌握这种使用方式,我们可以更灵活地使用DataGridComboBoxColumn列,并展示不同类型的数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值