Ejemplo n.º 1
0
    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() );
      }
    }
Ejemplo n.º 2
0
    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;
      }
    }