zoukankan      html  css  js  c++  java
  • List<T>转换为ObservableCollection<T>

    ObservableCollection能通知他变化了也正是因为它实现了INotifyPropertyChanged接口,

    在wpf项目中经常会遇到把List<T>转换为ObservableCollection<T>.

    总结了一下几种方法:

    首先有个 Employee实体类:

     public class Employee
        {
            private string name;
    
            public string Name
            {
                get { return name; }
                set { name = value; }
            }
    
            private int age;
    
            public int Age
            {
                get { return age; }
                set { age = value; }
            }
    
            private string sex;
    
            public string Sex
            {
                get { return sex; }
                set { sex = value; }
            }
    View Code

    接着有一个返回值为List<Employee>类型的方法:

     /// <summary>
            /// 填充一个List<Employee>
            /// </summary>
            /// <returns></returns>
            public List<Employee> GetEmployeeList()
            {
                List<Employee> list = new List<Employee> 
                {
                    new Employee{Name="张三",Age=19,Sex=""},
                    new Employee{Name="李四",Age=20,Sex=""},
                    new Employee{Name="小红",Age=18,Sex=""},
                };
                return list;
            }
    View Code

    有一个只读的ObservableCollection<Employee>类型的属性:

    private ObservableCollection<Employee> employeeList;
    
            public ObservableCollection<Employee> EmployeeList
            {
                get 
                {
                    if (employeeList == null)
                    {
                        employeeList = new ObservableCollection<Employee>();
                    }
                    return employeeList;
                }
            }
    View Code

    集合类型属性设置为只读的好处这里不展开。

    最后是调用GetEmployeeList方法获得一个List<Employee>的list,把这个list赋值给ObservableCollection<Employee>类型的集合属性:

     List<Employee> list = GetEmployeeList();
                if (list != null)
                {
                    EmployeeList.Clear();
                    //方法一如果ObservableCollection集合是可读可写的(set)
                    //EmployeeList = new ObservableCollection<Employee>(list); //错误:无法对属性或索引器“EmployeeList”赋值 -- 它是只读的    
                    //方法二:遍历list添加到ObservableCollection集合
                    //foreach (Employee item in list)
                    //{
                    //    EmployeeList.Add(item);
                    //}
                    //方法三:方法二的简写
                    list.ForEach(p => EmployeeList.Add(p)); //遍历list添加到EmployeeList中
                }
    View Code
  • 相关阅读:
    CF1327D Infinite Path 抽象代数
    CF1426 ABCDEF 数学+思维+DP
    CF1332E Height All the Same 计数
    CF1327E Count The Blocks 简单计数
    【CF1304】Codeforces Round #620 (Div. 2) 【思维+回文+构造+ST表】
    【CF1301】Codeforces Round #619 (Div. 2) 【思维+贪心+模拟+构造+二维ST表】
    【CF1255A】Changing Volume【思维】
    Json Master masters JSON!
    Polyglot Translators: Let's do i18n easier! 一款国际化插件小助手!
    mns: Money Never Sleeps! 自己开发的一款 IDEA 插件介绍.
  • 原文地址:https://www.cnblogs.com/527289276qq/p/4954394.html
Copyright © 2011-2022 走看看