internal SynchronizationContext(SortDescriptionsSyncContext context) { if (context == null) { throw new ArgumentNullException("context"); } m_context = context; m_isOwner = !context.ProcessingSortSynchronization; context.ProcessingSortSynchronization = true; }
private void SynchronizeWithDetailDescription( DataGridDetailDescription detailDescription ) { if( detailDescription != m_detailDescription ) { this.DetachFromDetailDescription(); m_shouldCreateColumns = true; m_detailDescription = detailDescription; DataGridSortDescriptionCollection dataGridSortDescriptionCollection = null; if( detailDescription != null ) { //register to the collectionchanged of the DataGridDetailDescription collection of the detailDescription matching this one. dataGridSortDescriptionCollection = detailDescription.DataGridSortDescriptions; m_groupDescriptions = detailDescription.GroupDescriptions; CollectionChangedEventManager.AddListener( detailDescription.ItemProperties, this ); CollectionChangedEventManager.AddListener( detailDescription.DetailDescriptions, this ); } else { dataGridSortDescriptionCollection = new DataGridSortDescriptionCollection(); m_groupDescriptions = new GroupDescriptionCollection(); } m_sortDescriptions = dataGridSortDescriptionCollection; m_sortDescriptionsSyncContext = null; //clear it, if it was ever set! //This update is required since there might be some columns in the Columns collection after the XAML parsing of the DetailConfiguration DataGridContext.SynchronizeSortProperties( dataGridSortDescriptionCollection.SyncContext, m_sortDescriptions, this.Columns ); //This update is required since we want the GroupLevelDescriptions to be created if DetailConfiguration in XAML //contains GroupDescriptions DataGridContext.UpdateGroupLevelDescriptions( this.GroupLevelDescriptions, new NotifyCollectionChangedEventArgs( NotifyCollectionChangedAction.Reset ), this.GroupDescriptions, this.Columns ); CollectionChangedEventManager.AddListener( m_sortDescriptions, this ); CollectionChangedEventManager.AddListener( m_groupDescriptions, this ); if( detailDescription != null ) { if( this.ReadLocalValue( DetailConfiguration.TitleProperty ) == DependencyProperty.UnsetValue ) { if( detailDescription.Title == null ) { this.Title = detailDescription.RelationName; } else { this.Title = detailDescription.Title; } } if( ( this.ReadLocalValue( DetailConfiguration.TitleTemplateProperty ) == DependencyProperty.UnsetValue ) && ( detailDescription.TitleTemplate != null ) ) { this.TitleTemplate = detailDescription.TitleTemplate; } DetailConfiguration.SynchronizeDetailConfigurations( detailDescription.DetailDescriptions, this.DetailConfigurations, this.AutoCreateDetailConfigurations, this.AutoCreateForeignKeyConfigurations, this.AutoRemoveColumnsAndDetailConfigurations ); } } if( detailDescription != null ) { ForeignKeyConfiguration.UpdateColumnsForeignKeyConfigurationsFromDataGridCollectionView( this.Columns.FieldNameToColumnDictionary, detailDescription.ItemProperties, this.AutoCreateForeignKeyConfigurations ); } }
protected SynchronizationContext StartSynchronizing(SortDescriptionsSyncContext context) { return(new SynchronizationContext(context)); }