栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

WPF

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

WPF

WPF_ComboBox的MVVM绑定(一)

WPF_ComboBox的MVVM绑定(一)
WPF_ComboBox的MVVM绑定(二)
WPF_ComboBox的MVVM绑定(三)

一、背景

在控件ComboBox中,我们一般会将选择项写在ComboBoxItem中,例如:


    
    
    
    

这样在界面上我们就会看到“Item0”、“Item1”、“Item2”、“Item3”之类的选项,但是我们选择ComboBoxItem之后,实际想要的的数据并不是“Item0”、“Item1”、“Item2”、“Item3”等在界面显示的字符串,还需要进一步做转换才能得到想要的数据。

但是如果将ComboBox做集合绑定,那么每一个ComboBoxItem就对应集合中的每一个元素,ComboBox中有一个DisplayMemberPath属性,这个属性就是用于界面显示的数据类型,可以将集合元素中的一个属性类型赋值给DisplayMemberPath属性。ComboBox中还有一个SelectedValuePath属性,用于指定在集合元素中被选中的值的类型,对应的SelectedValue属性的值就是就是这个指定的类型的值。

二、实现

直接上代码:

 public class ComboBoxItemModel
 {
     public string Description { get; set; }
     public T SelectedModel { get; set; }
     public bool IsEnable { get; set; }
 }

这里用了一个泛型,就是我们选择一项后需要的数据类型,一般用的多的是int类型,当然还可以自定义。在这个例子中,我们自定义了一个Person类使用。

    public class Person
    {
        public string Name { get; set; }
        public Decimal Salary { get; set; }
    }

然后就是ViewModel层,我这里偷了一个懒就直接使用了MainWindow类。实际使用中需要写在自定义的ViewModel中。

public partial class MainWindow : Window,INotifyPropertyChanged
    {
        public List> list { get; set; }

        private Person selectedModel;
        public Person SelectedModel 
        {
            get { return selectedModel; }
            set 
            {
                selectedModel = value;
                OnPropertyChanged();
                Console.WriteLine($"{ value.Name} {value.Salary}");
            }
        }
        public MainWindow()
        {
            InitializeComponent();
            this.DataContext = this;

            list = new List>
            {
                new ComboBoxItemModel{Description="Item0",SelectedModel=new Person{ Name="张三",Salary=10000m },IsEnable=true},
                new ComboBoxItemModel{Description="Item1",SelectedModel=new Person{ Name="李四",Salary=10000m },IsEnable=false},
                new ComboBoxItemModel{Description="Item2",SelectedModel=new Person{ Name="赵五",Salary=10000m },IsEnable=true},
                new ComboBoxItemModel{Description="Item3",SelectedModel=new Person{ Name="孙六",Salary=10000m },IsEnable=false},
                new ComboBoxItemModel{Description="Item4",SelectedModel=new Person{ Name="王七",Salary=10000m },IsEnable=true},
            };
            SelectedModel = list[0].SelectedModel;
        }

        public event PropertyChangedEventHandler PropertyChanged;

        private void OnPropertyChanged([CallerMemberName] string propertyName=null)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
    }

最后使我们的View层:


    
        
            
                
            
        
    

除了在背景章节中讲到的DisplayMemberPath和SelectedValuePath外。我们将SelectedValue属性也做了绑定,这个绑定的值才是我们真正需要的数据,在这个数据的Set访问器中我们可以获取到那个数据。

我们还可以看到在ComboBoxItemModel类中还有一个IsEnable属性,这个属性主要是考虑到有些ComboBoxItem可能在某些时候需要隐藏或者灰掉,所以使用了这个属性就是绑定,如果需要隐藏则需要绑定Visibility属性。

三、效果

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/906241.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号