public void CopyFrom(BaseObjectList value, int startIndex, int endIndex) { //整个复制过程完成后,再通知列表发生变化了 objects.CollectionChanged -= this.OnCollectionChanged; this.Clear(); _copyed.Clear(); if (endIndex > this.objects.Count) { endIndex = value.objects.Count; } for (int i = startIndex; i < endIndex; i++) { GeneralObject obj = value[i]; GeneralObject ngo = new GeneralObject(); ngo.CopyFrom(obj); Add(ngo); _copyed.Add(ngo); } //发送列表变化通知, 新增对象为列表本身 NotifyCollectionChangedEventArgs args = new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset); this.OnCollectionChanged(args); //还原继续监听列表单个数据变化过程 objects.CollectionChanged += this.OnCollectionChanged; IsModified = false; }
public void CopyFrom(BaseObjectList value) { //整个复制过程完成后,再通知列表发生变化了 objects.CollectionChanged -= this.OnCollectionChanged; this.Clear(); _copyed.Clear(); foreach (GeneralObject obj in value) { //如果对象是列表中新增的编辑对象,不复制 if (obj.List != null && obj.List.EmptyRow == obj) { continue; } GeneralObject ngo = new GeneralObject(); ngo.CopyFrom(obj); Add(ngo); _copyed.Add(ngo); } //发送列表变化通知, 新增对象为列表本身 NotifyCollectionChangedEventArgs args = new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset); this.OnCollectionChanged(args); //还原继续监听列表单个数据变化过程 objects.CollectionChanged += this.OnCollectionChanged; IsModified = false; }
public void NewPropertyValue(string propertyName) { //有属性默认值 var p = (from ps in PropertySetters where ps.PropertyName == propertyName select ps).FirstOrDefault(); if (p != null && p.Default != null) { //设置默认属性结果 SetPropertyValue(propertyName, p.Default, true, true); //如果默认属性是列表,调用列表的New过程 if (p.Default is BaseObjectList) { (p.Default as BaseObjectList).New(); } } //有默认对象,复制默认对象 else if (p != null && p.DefaultObject != null) { if (p.DefaultObject is GeneralObject) { //复制默认对象到新对象 GeneralObject go = p.DefaultObject as GeneralObject; GeneralObject ngo = new GeneralObject(); ngo.CopyFrom(go); p.Object.SetPropertyValue(p.PropertyName, ngo, false, true); } else if (p.DefaultObject is ObjectList) { //复制默认对象到新对象 ObjectList go = p.DefaultObject as ObjectList; ObjectList ngo = new ObjectList(); ngo.CopyFrom(go); p.Object.SetPropertyValue(p.PropertyName, ngo, false, true); } } else { //如果属性是集合 if (GetProperty(propertyName).PropertyType == typeof(BaseObjectList)) { //如果属性存在,清空集合 BaseObjectList old = (BaseObjectList)this.GetPropertyValue(propertyName); if (old != null) { old.New(); } //否则,无不置空标记,设置一个空集合 else if (!NotEmpty) { SetPropertyValue(propertyName, new ObjectList(), true); } } else { SetPropertyValue(propertyName, null, true, true); } } }
private static void OnHasEmptyRowChanged(DependencyObject o, DependencyPropertyChangedEventArgs e) { BaseObjectList list = (BaseObjectList)o; if (e.NewValue != null && (bool)e.NewValue) { list.CreateEmpty(); } }
public static void OnDefaultChanged(DependencyObject dp, DependencyPropertyChangedEventArgs args) { BaseObjectList ol = (BaseObjectList)dp; //如果列表为空,把默认值添加到列表中 if (ol.Count == 0) { ol.Add(ol.Default); } }
/// <summary> /// 路径改变时,获取数据 /// </summary> /// <param name="dp">自身</param> /// <param name="args">新值参数</param> public static void OnPathChanged(DependencyObject dp, DependencyPropertyChangedEventArgs args) { //分页组件有MultiPath时,在MultiPath时加载数据,Path发生改变时不加载数据 if (dp is PagedObjectList && ((PagedObjectList)dp).MultiPath != null) { return; } BaseObjectList ol = (BaseObjectList)dp; //如果指明Path改变时,不加载数据,则只有当外界要求,加载数据时,才加载 if (ol.LoadOnPathChanged) { ol.Load(); } }
//设置列表属性,设置时,将监听其IsModified属性改变事件 private void SetCollectionProperty(string key, BaseObjectList ol) { //如果有默认对象,且要设置的列表为空,采用默认对象的复制结果 var p = (from ps in PropertySetters where ps.PropertyName == key select ps).FirstOrDefault(); if (p != null && p.DefaultObject != null && (ol == null || ol.Count == 0)) { //复制默认对象到新对象 ObjectList go = p.DefaultObject as ObjectList; ObjectList ngo = new ObjectList(); ngo.CopyFrom(go); ol = ngo; } SetPropertyValue(key, ol, true); ol.Watch("IsModified", ol_PropertyChanged); }
private static void OnEmptyRowChanged(DependencyObject o, DependencyPropertyChangedEventArgs e) { BaseObjectList list = (BaseObjectList)o; //清除旧的空行的监听 if (e.OldValue != null) { GeneralObject go = (GeneralObject)e.OldValue; go.DynamicPropertyChanged -= list.EmptyRowChanged; } //新加空行在动态属性变化后,在列表最后添加新空行 if (e.NewValue != null) { GeneralObject go = (GeneralObject)e.NewValue; go.DynamicPropertyChanged += list.EmptyRowChanged; } }
private static void OnSourceChanged(DependencyObject o, DependencyPropertyChangedEventArgs e) { BaseObjectList list = (BaseObjectList)o; list.OnSourceChanged(); }
public MyList(BaseObjectList list) { _list = list; list.PropertyChanged += list_PropertyChanged; }
public int IndexOf(BaseObjectList list) { return(list.IndexOf(this)); }