public InventoryDataGrid()
 {
     InitializeComponent();
     CollectionViewModelObserverSubject subject = CollectionViewModelObserverSubject.GetInstance();
     _viewModel = new InventoryWrapperViewModel(subject);
     _viewModel.NewItemAddHandler += OnNewItemAdditionHandlerCallback;
     _viewModel.SelectedItemModifyHandler += OnSelectedItemModifyHandlerCallback;
     DataContext = _viewModel;
 }
        /// <summary>
        /// 기존의 Inventory 데이터를 수정하고자 할 생성자
        /// </summary>
        /// <param name="viewModel"></param>
        /// <param name="inventoryWrapper">수정하고자할 inventory 래핑 클래스</param>
        public InventoryWrapperEditorViewModel(InventoryWrapperViewModel viewModel, InventoryWrapper inventoryWrapper) : base(inventoryWrapper)
        {
            if (inventoryWrapper == null)
                throw new ArgumentNullException();

            _viewModel = viewModel;
            _target = inventoryWrapper;

            Specification = inventoryWrapper.Specification;
            Item = inventoryWrapper.Item;
            Warehouse = inventoryWrapper.Warehouse;

            ItemList = new ItemWrapper[] { Item };
            SpecificationList = new SpecificationWrapper[] { Specification };
            WarehouseList = FieldWrapperDirector.GetInstance().CreateCollection<Warehouse, Observable<Warehouse>>().Where(x => !x.IsDeleted);
        }
        /// <summary>
        /// 새로운 Inventory 데이터를 추가하고자 할 생성자
        /// </summary>
        /// <param name="viewModel"></param>
        public InventoryWrapperEditorViewModel(InventoryWrapperViewModel viewModel) : base()
        {
            _viewModel = viewModel;
            FieldWrapperDirector fwd = FieldWrapperDirector.GetInstance();
            InventoryWrapperDirector iwd = InventoryWrapperDirector.GetInstance();

            //아직 Inventory 데이터가 없는 Item(With Specification) 데이터의 리스트를 구한다.
            IEnumerable<SpecificationWrapper> specifications = fwd.CreateCollection<Specification, SpecificationWrapper>().Where(x => !x.IsDeleted);
            List<ItemWrapper> itemWrapperList = new List<ItemWrapper>();
            foreach (SpecificationWrapper specification in specifications)
            {
                if (iwd.SearchAsSpecificationKey(specification.ID) == null)
                {
                    ItemWrapper itemw = fwd.BinSearch<Item, ItemWrapper>(specification.Field.ItemID);
                    if (itemw != null && !itemw.IsDeleted)
                        itemWrapperList.Add(itemw);
                }
            }
            ItemList = itemWrapperList.Distinct(); //겹치는 데이터를 제거하여 ItemList에 대입

            WarehouseList = fwd.CreateCollection<Warehouse, Observable<Warehouse>>().Where(x => !x.IsDeleted);
        }