/// <summary> /// Keep underlying model collection synchronized with wrapper-collection. /// Note: wrapper-collection performs change-notification and change-tracking. /// </summary> /// <typeparam name="TWrapper">Wrapper class</typeparam> /// <typeparam name="TModel">Underlying class</typeparam> /// <param name="wrapperCollection">ChangeTrackingCollection</param> /// <param name="modelCollection">Underlying generic collection</param> protected void RegisterCollection <TWrapper, TModel>( ChangeTrackingCollection <TWrapper> wrapperCollection, List <TModel> modelCollection) where TWrapper : ModelWrapper <TModel> { // Synchronize underlying model collection with wrapperCollection wrapperCollection.CollectionChanged += (s, e) => { modelCollection.Clear(); modelCollection.AddRange(wrapperCollection.Select(w => w.Model)); }; RegisterTrackingObject(wrapperCollection); }