return;\r
sourceAsList.Add(entity);\r
OnAdd(entity);\r
+ ListChangedEventHandler handler = ListChanged;\r
+ if (handler != null)\r
+ handler(this, new ListChangedEventArgs(ListChangedType.ItemAdded, sourceAsList.Count - 1));\r
}\r
\r
[DbLinqToDo]\r
throw new ArgumentOutOfRangeException();\r
OnAdd(entity);\r
sourceAsList.Insert(index, entity);\r
+ ListChangedEventHandler handler = ListChanged;\r
+ if (handler != null)\r
+ handler(this, new ListChangedEventArgs(ListChangedType.ItemAdded, index));\r
}\r
\r
/// <summary>\r
{\r
OnRemove(sourceAsList[index]);\r
sourceAsList.RemoveAt(index);\r
+ ListChangedEventHandler handler = ListChanged;\r
+ if (handler != null)\r
+ handler(this, new ListChangedEventArgs(ListChangedType.ItemDeleted, index));\r
}\r
\r
/// <summary>\r
{\r
get\r
{\r
- return Source.ElementAt(index);\r
+ if(! this.HasLoadedOrAssignedValues)\r
+ return Source.ElementAt(index);\r
+ return sourceAsList[index];\r
}\r
set\r
{\r
\r
#region ICollection<TEntity> Members\r
\r
+ private void clear()\r
+ {\r
+ sourceAsList.Clear();\r
+ Source = Enumerable.Empty<TEntity>();\r
+ }\r
+\r
/// <summary>\r
/// Removes all items in collection\r
/// </summary>\r
public void Clear()\r
{\r
- while (sourceAsList.Count > 0)\r
- Remove(sourceAsList [0]);\r
- Source = Enumerable.Empty<TEntity>();\r
+ clear();\r
+ ListChangedEventHandler handler = ListChanged;\r
+ if (handler != null)\r
+ handler(this, new ListChangedEventArgs(ListChangedType.Reset, -1));\r
}\r
\r
/// <summary>\r
/// <returns>\r
/// <c>true</c> if [contains] [the specified entity]; otherwise, <c>false</c>.\r
/// </returns>\r
+ [DbLinqToDo]\r
public bool Contains(TEntity entity)\r
{\r
- return Source.Contains(entity);\r
+ return sourceAsList.Contains(entity);\r
}\r
\r
/// <summary>\r
{\r
get\r
{\r
+ if (!this.HasLoadedOrAssignedValues)\r
+ return Source.Count();\r
return sourceAsList.Count;\r
}\r
}\r
public bool Remove(TEntity entity)\r
{\r
OnRemove(entity);\r
+ ListChangedEventHandler handler = ListChanged;\r
+ int i = sourceAsList.IndexOf(entity);\r
+ if (handler != null)\r
+ handler(this, new ListChangedEventArgs(ListChangedType.ItemDeleted, i));\r
return sourceAsList.Remove(entity);\r
}\r
\r
/// </value>\r
public bool IsDeferred\r
{\r
- get { return Source is IQueryable; }\r
+ get { return SourceInUse == null && Source is IQueryable; }\r
}\r
\r
/// <summary>\r
public void Assign(IEnumerable<TEntity> entitySource)\r
{\r
// notifies removals and adds\r
- Clear();\r
+ clear();\r
foreach (var entity in entitySource)\r
+ {\r
OnAdd(entity);\r
+ }\r
this.Source = entitySource;\r
this.SourceInUse = sourceAsList;\r
+ ListChangedEventHandler handler = ListChanged;\r
+ if (handler != null)\r
+ handler(this, new ListChangedEventArgs(ListChangedType.Reset,-1));\r
}\r
\r
/// <summary>\r
/// </summary>\r
public void Load()\r
{\r
- this.sourceAsList.Count();\r
+ IList<TEntity> list = this.sourceAsList;\r
}\r
\r
/// <summary>\r