Exemplo n.º 1
0
        /// <summary>
        /// 在原始的医嘱对象列表发生改变后调用此事件,以同步医嘱视图列表
        /// </summary>
        /// <param name="e"></param>
        /// <param name="actualIndex"></param>
        internal void AfterListChanged(ListChangedEventArgs e)
        {
            //// 重新生成满足当前设置的医嘱对象列表
            //ResetInnerList();
            // --e中的Index是基于InnerList的,所以在处理原始列表时要进行转换处理
            //int actualIndex;
            // 同步医嘱视图列表
            switch (e.ListChangedType)
            {
            case ListChangedType.ItemAdded:
                OrderList[e.NewIndex].Added(); // 需要手工设置新加入医嘱对象的状态
                _maxSerialNo++;
                OrderViewList.Insert(e.NewIndex, new OrderView(OrderList[e.NewIndex]));
                break;

            case ListChangedType.ItemChanged:
                // 更新原位置对应的医嘱视图内容
                OrderViewList[e.NewIndex].ResetProperties();
                break;

            case ListChangedType.ItemDeleted:
                for (int index = OrderViewList.Count - 1; index >= 0; index--)
                {
                    // 视图对应的医嘱在医嘱列表中不存在,则删除
                    if (OrderList.IndexOf(OrderViewList[index].OrderCache) < 0)
                    {
                        OrderViewList.RemoveAt(index);
                    }
                }
                break;

            case ListChangedType.ItemMoved:
            case ListChangedType.Reset:
                ResetViewList();
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
        }