public void OnSourceCollectionChanged(object sender, NotifyCollectionChangedEventArgs e) { if (e.Action != NotifyCollectionChangedAction.Add || e.NewItems == null) { return; } if (Source == null) { Source = new WMSBusinessCollection <Entity2GC>(); } foreach (var item in e.NewItems) { if (item == null) { continue; } if (Source == null) { continue; } var newItem = new Entity2GC { ENTITY2GCKEY = ((WMSBusinessObject)item).GetKey().ToString() }; Source.Add(newItem); ChildSource.Add((WMSBusinessObject)item); } }
private void UpdateSource(Entity2GC obj) { if (Source == null) { return; } try { ParentViewModelSource.SuspendNotifications(); ParentViewModelSource.SuspendValidating(); Source.SuspendNotifications(); var parentViewModelSourceName = GetParentViewModelSourceName(); using (var mgr = IoC.Instance.Resolve <IBaseManager <Entity2GC> >()) { // Перевычитываем из БД весь Source if (obj == null) { var keys = Source.Select(item => (object)item.ENTITY2GCID).ToList(); if (keys.Count <= 0) { return; } var array = mgr.GetFiltered(FilterHelper.GetFilterIn(Entity2GC.ENTITY2GCIDPropertyName, keys)).ToArray(); foreach (var itParent in array.Cast <IHasParent>().Where(itParent => itParent != null)) { itParent.SourceTypeName = _itemType.Name.ToUpper(); itParent.TargetTypeName = parentViewModelSourceName; } Source.Clear(); Source.AddRange(array); ParentViewModelSource.AcceptChanges(); } else { var isDirty = ParentViewModelSource.IsDirty; var index = Source.IndexOf(obj); Source.RemoveAt(index); var it = mgr.Get(obj.GetKey()); var itParent = (IHasParent)it; if (itParent != null) { itParent.SourceTypeName = _itemType.Name.ToUpper(); itParent.TargetTypeName = GetParentViewModelSourceName(); } Source.Insert(index, it); if (!isDirty) { ParentViewModelSource.AcceptChanges(); } } } } finally { Source.ResumeNotifications(); ParentViewModelSource.ResumeValidating(); ParentViewModelSource.ResumeNotifications(); ParentViewModelSource.Validate(); } }