| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 | 
							- using System;
 
- using System.Collections.Generic;
 
- using System.Linq;
 
- using InABox.Core;
 
- namespace comal.timesheets
 
- {
 
-     
 
-     
 
-     public abstract class ListDataModel<TEntity, TItem> : CoreDataModel<TEntity>, IListDataModel<TEntity, TItem>
 
-         where TEntity : Entity, IRemotable, IPersistent, new() 
 
-         where TItem : CoreDataModelItem, new()
 
-     {
 
-         public SortOrder<TEntity> Sort => LookupFactory.DefineSort<TEntity>();
 
-         
 
-         private IEnumerable<TItem> _allitems;
 
-         
 
-         protected IList<TItem> _items = new List<TItem>();
 
-         public IList<TItem> Items
 
-         {
 
-             get => _items;
 
-             set => SetProperty(ref _items, value);
 
-         }
 
-         
 
-         public void Search(Func<TItem, bool> predicate)
 
-         {
 
-             Items = predicate != null
 
-                 ? new List<TItem>(_allitems.Where(predicate))
 
-                 : new List<TItem>(_allitems);
 
-         }
 
-         
 
-         public virtual void BeforeLoad(MultiQuery query, Filter<TEntity> filter)
 
-         {
 
-             
 
-         }        
 
-         
 
-         public virtual void AfterLoad(MultiQuery query, Filter<TEntity> filter)
 
-         {
 
-             
 
-         }
 
-         public void Load(Filter<TEntity> filter, Action loaded = null)
 
-         {
 
-             MultiQuery query = new MultiQuery();
 
-             
 
-             query.Add(
 
-                 filter,
 
-                 Columns,
 
-                 Sort
 
-             );
 
-             
 
-             BeforeLoad(query, filter);
 
-             
 
-             query.Query(
 
-                 (q) =>
 
-                 {
 
-                     _allitems = new List<TItem>(q.Get<TEntity>().Rows.Select(row => CreateItem<TItem>(row)));
 
-                     
 
-                     Search(null);
 
-                     AfterLoad(q, filter);
 
-                     loaded?.Invoke();                        
 
-   
 
-                 });
 
-         }
 
-         protected T CreateItem<T>(CoreRow row) where T : CoreDataModelItem, new()
 
-         {
 
-             var result = new T() { Row = row, Parent = this };
 
-             result.PropertyChanged += (sender, args) => DoPropertyChanged(result, args);
 
-             return result;
 
-         }
 
-     }
 
-     
 
-     
 
- }
 
 
  |