KeyedCollection<TKey, TItem> 结合事件 当添加移除什么的时候触发事件

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using System.Collections.ObjectModel;
namespace KeyedCollectionDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            SimpleOrder my = new SimpleOrder();
            my.Changed += new EventHandler<SimpleOrderChangedEventArgs>(AddEvent);
            my.Add(new OrderItem(1001,"hello",1,1));
            my.Add(new OrderItem(1002, "hells", 1, 1));
            my.Add(new OrderItem(1003, "hellss", 1, 1));
            Console.WriteLine(my[1002].ToString());
            my.Insert(2,new OrderItem(1004,"hellssss1",1,1));
            foreach (OrderItem m in my)
            {
              Console.WriteLine(m.ToString());
            }
           
            Console.ReadKey();
        }
        public static void AddEvent(object o, SimpleOrderChangedEventArgs s)
        {
            Console.WriteLine("事件触发了");
        }
    }

    public class SimpleOrder : KeyedCollection<int, OrderItem>
    {
        public event EventHandler<SimpleOrderChangedEventArgs> Changed;
        public SimpleOrder()
            : base()
        { }
        protected override int GetKeyForItem(OrderItem item)
        {
            return item.PartNumber;
        }
        protected override void InsertItem(int index, OrderItem newitem)
        {
            base.InsertItem(index, newitem);
            EventHandler<SimpleOrderChangedEventArgs> temp = Changed;
            if (newitem != null)
            {
                temp(this, new SimpleOrderChangedEventArgs(ChangeType.Added, newitem, null));
            }
        }
    }

    public class SimpleOrderChangedEventArgs : EventArgs
    {
        private OrderItem _changedItem;
        private ChangeType _changType;
        private OrderItem _replacedWith;
        public SimpleOrderChangedEventArgs(ChangeType change,
        OrderItem item, OrderItem replacement)
        {
            _changType = change;
            _changedItem = item;
            _replacedWith = replacement;
        }
 
    }
    public enum ChangeType
{
    Added, 
    Removed, 
    Replaced, 
    Cleared
};

    public class OrderItem
    {
        public readonly int PartNumber;
        public readonly string Description;
        public readonly double UnitPrice;
        private int _quantity = 0;
        public OrderItem(int partNumber, string description, int quantity, double unitPrice)
        {
            this.PartNumber = partNumber;
            this.Description = description;
            this.Quantity = quantity;
            this._quantity = quantity;
        }
        public int Quantity
        {
            get { return _quantity; }
            set
            {
                if (value < 0)
                {
                    throw new ArgumentException("Quantity cannot be negative.");
                }
                else
                {
                    _quantity = value;
                }
            }
        }
        public override string ToString()
        {
            return String.Format(
                "{0,9} {1,6} {2,-12} at {3,8:#,###.00} = {4,10:###,###.00}",
                PartNumber, _quantity, Description, UnitPrice,
                UnitPrice * _quantity);
        }
    }
}

 

posted on 2012-12-03 11:03  R.Ray  阅读(186)  评论(0)    收藏  举报

导航