protected override void RestoreStateCore(IDataGridContextVisitable dataGridContextVisitable) { try { m_rootDataGridContext = SaveRestoreDataGridContextStateVisitor.GetDataGridContextFromVisitable(dataGridContextVisitable); if (m_saveExpandedItems) { for (int i = 0; i < m_itemsToExpand.Count; i++) { object dataItemToExpand = m_itemsToExpand[i].Target; if (dataItemToExpand != null) { try { // Verify if we have a System.Data.DataView as ItemsSource to // ensure to restore the System.Data.DataRowView that represents // the System.Data.DataRow saved previously System.Data.DataView dataView = ItemsSourceHelper.TryGetDataViewFromDataGridContext(m_rootDataGridContext); if ((dataView != null) && (dataItemToExpand is System.Data.DataRow)) { foreach (System.Data.DataRowView dataRowView in dataView) { if (dataRowView.Row == dataItemToExpand) { dataItemToExpand = dataRowView; break; } } } m_rootDataGridContext.ExpandDetails(dataItemToExpand); } catch { System.Diagnostics.Debug.Assert(false, "Item has moved in the source ?"); } } } } bool visitWasStopped; dataGridContextVisitable.AcceptVisitor(0, int.MaxValue, this, DataGridContextVisitorType.Groups, false, out visitWasStopped); } finally { m_itemsToExpand = null; m_rootDataGridContext = null; } }
private void RecursiveSaveDataGridContextsState(DataGridContext dataGridContext) { var saveRestoreDataGridContextStateVisitor = new SaveRestoreDataGridContextStateVisitor(true, int.MaxValue, m_stopAtFirstCollapsedGroup); saveRestoreDataGridContextStateVisitor.SaveState(dataGridContext as IDataGridContextVisitable); m_dataGridContextsStateDictionary.Add(new WeakDataGridContextKey(dataGridContext), saveRestoreDataGridContextStateVisitor); foreach (var subDataGridContext in dataGridContext.GetChildContextsCore()) { this.RecursiveSaveDataGridContextsState(subDataGridContext); } }
private void RecursiveSaveDataGridContextsState( DataGridContext dataGridContext ) { SaveRestoreDataGridContextStateVisitor saveRestoreDataGridContextStateVisitor = new SaveRestoreDataGridContextStateVisitor( true, int.MaxValue, m_stopAtFirstCollapsedGroup ); saveRestoreDataGridContextStateVisitor.SaveState( dataGridContext as IDataGridContextVisitable ); m_dataGridContextsStateDictionary.Add( new WeakDataGridContextKey( dataGridContext ), saveRestoreDataGridContextStateVisitor ); IEnumerable<DataGridContext> subDataGridContexts = dataGridContext.GetChildContexts(); foreach( DataGridContext subDataGridContext in subDataGridContexts ) { this.RecursiveSaveDataGridContextsState( subDataGridContext ); } }
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; } }