internal void RestoreDataGridContextState( DataGridContext dataGridContext ) { if( ( m_dataGridContextsStateDictionary == null ) || ( m_dataGridContextsStateDictionary.Count == 0 ) ) return; if( dataGridContext == null ) throw new ArgumentNullException( "dataGridContext" ); // A call to RestoreDataGridContextState can be made while processing a save or a restore // of a DataGridContext because the Generator forces the call in EnsureNodeTreeCreated // when public methods are accessed. If we are saving, already restoring or pending restoring // we ignore this call if( dataGridContext.IsSavingState || dataGridContext.IsDeferRestoringState || dataGridContext.IsRestoringState ) return; WeakDataGridContextKey weakDataGridContextKey = new WeakDataGridContextKey( dataGridContext ); SaveRestoreDataGridContextStateVisitor saveRestoreDataGridContextStateVisitor; if( m_dataGridContextsStateDictionary.TryGetValue( weakDataGridContextKey, out saveRestoreDataGridContextStateVisitor ) ) { try { dataGridContext.IsRestoringState = true; // Restoring this dataGridContext state's will expand sub items that should be expanded. // Their expansion will make the customItemGenerator generate sub detailNodes, which in turn will try // to be restored to their previous state. saveRestoreDataGridContextStateVisitor.RestoreState( ( IDataGridContextVisitable )dataGridContext ); Debug.WriteLineIf( this.DebugSaveRestore, "RESTORING DataGridContext state for WeakDataGridContextKey: " + weakDataGridContextKey.GetHashCode().ToString() + " RESTORED!" ); } catch { Debug.WriteLineIf( this.DebugSaveRestore, "RESTORING DataGridContext state for WeakDataGridContextKey: " + weakDataGridContextKey.GetHashCode().ToString() + " FAILED!" ); } finally { m_dataGridContextsStateDictionary.Remove( weakDataGridContextKey ); dataGridContext.IsRestoringState = false; } } else { Debug.WriteLineIf( this.DebugSaveRestore, "Cannot Restore. No state saved for WeakDataGridContextKey: " + weakDataGridContextKey.GetHashCode().ToString() ); } }
internal void SaveDataGridContextState( DataGridContext dataGridContext, bool handleExpandedItems, int maxGroupLevel ) { if( dataGridContext == null ) throw new ArgumentNullException( "dataGridContext" ); Debug.Assert( !dataGridContext.IsRestoringState ); if( dataGridContext.IsSavingState ) return; dataGridContext.IsSavingState = true; try { WeakDataGridContextKey weakDataGridContextKey = new WeakDataGridContextKey( dataGridContext ); if( m_dataGridContextsStateDictionary == null ) { m_dataGridContextsStateDictionary = new Dictionary<WeakDataGridContextKey, SaveRestoreDataGridContextStateVisitor>(); } else if( m_dataGridContextsStateDictionary.ContainsKey( weakDataGridContextKey ) ) { // Already a state saved for this context. Don't overwrite it. Debug.WriteLineIf( this.DebugSaveRestore, "Already a state saved for WeakDataGridContextKey: " + weakDataGridContextKey.GetHashCode().ToString() ); return; } SaveRestoreDataGridContextStateVisitor saveRestoreDataGridContextStateVisitor = new SaveRestoreDataGridContextStateVisitor( handleExpandedItems, maxGroupLevel, false ); try { saveRestoreDataGridContextStateVisitor.SaveState( ( IDataGridContextVisitable )dataGridContext ); m_dataGridContextsStateDictionary.Add( weakDataGridContextKey, saveRestoreDataGridContextStateVisitor ); Debug.WriteLineIf( this.DebugSaveRestore, "SAVING DataGridContext state for WeakDataGridContextKey: " + weakDataGridContextKey.GetHashCode().ToString() + " SAVED!" ); } catch { Debug.WriteLineIf( this.DebugSaveRestore, "SAVING DataGridContext state for WeakDataGridContextKey: " + weakDataGridContextKey.GetHashCode().ToString() + " FAILED!" ); } } finally { dataGridContext.IsSavingState = false; } }