前往小程序,Get更优阅读体验!
立即前往
社区首页 >专栏 >C# WPF mvvm模式下combobox绑定(list<enum>、Dictionary<int,string>)

C# WPF mvvm模式下combobox绑定(list<enum>、Dictionary<int,string>)

作者头像
用户9127601
发布于 2021-11-01 03:09:07
发布于 2021-11-01 03:09:07
5.7K00
代码可运行
举报
文章被收录于专栏:dotNET编程大全dotNET编程大全
运行总次数:0
代码可运行

ComboBox是一个非常常用的界面控件,它的数据源ItemsSource既可以绑定一个List列表,也可以是一个字典,本篇文章就讲这些内容展开讲解。

01

前言

ComboBox是一个非常常用的下拉菜单界面控件,它的数据源ItemsSource既可以绑定一个List列表,也可以是一个字典,本篇文章就讲这些内容展开讲解。

首先,讲解几个常用的属性概念:

ItensSource:用于指定下拉列表绑定的List<string>数据对象;

SelectedIndex :下拉列表中选中行的索引;

DisplayMemberPath:下拉列表中要显示的List<T>数据对象的列,因为List<T>数据对象可能会有多列;

SelectedValuePath:下拉列表中,对应与显示的List<T>数据对象的列,返回的List<T>数据对象的列;

02

绑定ObservableCollection<T>

① 第一种情况T为一个普通学生类时:

类的定义:

代码语言:javascript
代码运行次数:0
复制
 public class Students
    {
        public int ID { get; set; }
        public string Name { get; set; }
    }

数据绑定:

代码语言:javascript
代码运行次数:0
复制
 <dxlc:LayoutItem
                        Margin="10,0,0,0"
                        FontSize="13"
                        Label="StudentName" HorizontalContentAlignment="Right">
                            <ComboBox
                            Width="150"
                            HorizontalAlignment="Left"
                            SelectedIndex="2"
                            DisplayMemberPath="Name"
                            ItemsSource="{Binding StudentList, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" />
                        </dxlc:LayoutItem>

viewmodel中:

代码语言:javascript
代码运行次数:0
复制
 public ObservableCollection<Students> StudentList { get; set; } = new ObservableCollection<Students>();
代码语言:javascript
代码运行次数:0
复制
  StudentList.Add(new Students() { ID = 1, Name = "xiao zhu"});
            StudentList.Add(new Students() { ID = 2, Name = "xiao Li" });
            StudentList.Add(new Students() { ID = 3, Name = "xiao Wang" });
            StudentList.Add(new Students() { ID = 4, Name = "xiao Zhang" });

②第二种情况T为HumanSkinColors的枚举类型时:

枚举定义:

代码语言:javascript
代码运行次数:0
复制
 public enum HumanSkinColors
{
        Yellow,
        White,
        Black
    }

数据绑定:

代码语言:javascript
代码运行次数:0
复制
<dxlc:LayoutItem
                        Margin="10,0,0,0"
                        FontSize="13"
                        Label="HumanSkinColor" HorizontalContentAlignment="Right">
                            <dxe:ComboBoxEdit
                            Width="150"
                            HorizontalAlignment="Left"
                            SelectedIndex="0"
                            ItemsSource="{Binding HumanSkinList, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" />
                        </dxlc:LayoutItem>

viewmodel代码:

代码语言:javascript
代码运行次数:0
复制
public ObservableCollection<Students> StudentList { get; set; } = new ObservableCollection<Students>();
代码语言:javascript
代码运行次数:0
复制
 foreach (HumanSkinColors HumanSkinColor in Enum.GetValues(typeof(HumanSkinColors)))
            {
                HumanSkinList.Add(HumanSkinColor);
            }

03

绑定Dictionary<T,T>

字典的定义:

代码语言:javascript
代码运行次数:0
复制
public Dictionary<int,string> StudentDic { get; set; } = new Dictionary<int, string>();

数据绑定:

代码语言:javascript
代码运行次数:0
复制
<dxlc:LayoutItem
                        Margin="10,0,0,0"
                        FontSize="13"
                        Label="StudentName" HorizontalContentAlignment="Right">
                            <ComboBox
                            Width="150"
                            HorizontalAlignment="Left"
                            SelectedIndex="3"
                            DisplayMemberPath="Value"
                            SelectedValuePath="Key" 
                            ItemsSource="{Binding StudentDic}" />
                        </dxlc:LayoutItem>

viewmodel代码:

代码语言:javascript
代码运行次数:0
复制
StudentDic.Add(1, "xiao zhu");
            StudentDic.Add(2, "xiao Li");
            StudentDic.Add(3, "xiao Wang");
            StudentDic.Add(4, "xiao Zhang");

04

结果展示

05

源码下载

链接:https://pan.baidu.com/s/1azXzP8Xtp8488pN0s1C4Uw

提取码:点击在看后请添加小编微信zls20210502获取。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-10-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 dotNET编程大全 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档