BindingList<T>的Add方法、AddNew方法与AddingNew事件

代码示例:

using System;
using System.ComponentModel;

namespace Test
{
    class Program
    {
        static void Main()
        {
            var list = new BindingList<Item>();
            list.AddingNew += (s, e) =>
                                  {
                                      //使用BindingList<T>.AddNew方法加入自定义新项时得在这里加,否则会调用T的默认构造方法自动创建一个。
                                      e.NewObject = new Item(0);
                                      Console.WriteLine("AddingNew");
                                  };
            list.ListChanged += (s, e) =>
                                    {
                                        Console.WriteLine("ListChanged:" + e.ListChangedType);
                                    };

            //只有BindingList<T>.AddNew方法才会触发AddingNew事件,同时配置BindingList<T>.AddNew(丢弃新增项)与BindingList<T>.EndNew方法(提交新增项)
            {
                var item = list.AddNew();

                var index = list.IndexOf(item);
                Console.WriteLine("count of list: " + list.Count);//结果为:1
                list.CancelNew(index);
                Console.WriteLine("count of list: " + list.Count);//结果为:0
                list.EndNew(index);
                Console.WriteLine("count of list: " + list.Count);//结果为:0
            }

            //BindingList<T>也实现了Collection<T>接口,Collection<T>.Add与Insert 方法只会引发ListChanged事件
            {
                var item = new Item(0);
                list.Add(item);
            }

            Console.WriteLine("count of list: " + list.Count);//结果为:1
            Console.ReadKey();
        }
        class Item
        {
            public Item(int a)
            {
            }
        }
    }

}




运行结果:


posted @ 2012-05-18 10:05  beta2013  阅读(950)  评论(0编辑  收藏  举报