public DataGridCollectionViewSourceBase()
      : base()
    {
      m_itemProperties = new ObservableCollection<DataGridItemPropertyBase>();
      m_itemProperties.CollectionChanged += new NotifyCollectionChangedEventHandler( this.ForwardedCollection_CollectionChanged );
      m_dataGridDetailDescriptions = new DataGridDetailDescriptionCollection();
      m_dataGridDetailDescriptions.CollectionChanged += new NotifyCollectionChangedEventHandler( this.ForwardedCollection_CollectionChanged );

      // We force a culture because it is the only way to be
      // notified when the Culture changes in order to launch our own
      // ApplyExtraPropertiesToView (because the implentation of ApplyPropertiesToView is not virtual!)
      // 
      // See CollectionViewSource.ApplyPropertiesToView in reflector for a better understanding.
      this.Culture = CultureInfo.InvariantCulture;
    }
    protected DataGridDetailDescription()
    {
      m_detailDescriptions = new DataGridDetailDescriptionCollection();
      m_detailDescriptions.CollectionChanged += this.OnDetailDescriptionsCollectionChanged;

      m_itemProperties = new DataGridItemPropertyCollection();
      m_itemProperties.CollectionChanged += this.OnItemPropertiesCollectionChanged;

      m_groupDescriptions = new GroupDescriptionCollection();
      m_sortDescriptions = new DataGridSortDescriptionCollection();
      m_statFunctions = new StatFunctionCollection();
      m_autoFilterValues = new ReadOnlyDictionary<string, IList>();
      m_autoFilteredItems = new ObservableCollection<DataGridItemPropertyBase>();
      m_registeredFieldNamesToAutoFilterValues = new Dictionary<string, INotifyCollectionChanged>();
      m_registeredAutoFilterValuesToFieldNames = new Dictionary<INotifyCollectionChanged, string>();

      this.AutoCreateDetailDescriptions = true;
      this.AutoCreateItemProperties = true;
      this.DefaultCalculateDistinctValues = true;
    }
    private void SetupDefaultDetailDescriptions()
    {
      if( this.CanHaveDetails )
      {
        List<DataGridDetailDescription> defaultDetailDescriptions = this.GetDefaultDetailDescriptions();

        if( this.AutoCreateDetailDescriptions )
        {
          m_dataGridDetailDescriptions = new DataGridDetailDescriptionCollection( defaultDetailDescriptions );
        }
        else
        {
          m_dataGridDetailDescriptions = new DataGridDetailDescriptionCollection( new List<DataGridDetailDescription>() );
        }

        m_dataGridDetailDescriptions.DefaultDetailDescriptions = defaultDetailDescriptions;
      }
      else
      {
        // We still create the DetailDescriptions collection but will validate on any modification that the collection view does
        // in fact support master/detail.
        m_dataGridDetailDescriptions = new DataGridDetailDescriptionCollection( new List<DataGridDetailDescription>() );
      }

      CollectionChangedEventManager.AddListener( m_dataGridDetailDescriptions, this );
    }
Ejemplo n.º 4
0
    internal static void SynchronizeAddedConfigurations( IList addedDetailConfigs, DataGridDetailDescriptionCollection detailDescriptions )
    {
      foreach( DetailConfiguration detailConfig in addedDetailConfigs )
      {
        DataGridDetailDescription detailDesc = null;

        if( detailDescriptions != null )
        {
          detailDesc = detailDescriptions[ detailConfig.RelationName ];
        }

        detailConfig.SynchronizeWithDetailDescription( detailDesc );
      }
    }
Ejemplo n.º 5
0
    internal static void SynchronizeDetailConfigurations(
      DataGridDetailDescriptionCollection dataGridDetailDescriptionCollection,
      DetailConfigurationCollection detailConfigurationCollection,
      bool autoCreateDetailConfigurations,
      bool autoCreateForeignKeyConfigurations,
      bool autoRemoveUnassociated )
    {
      HashSet<DetailConfiguration> detailConfigWithAssociation = new HashSet<DetailConfiguration>();
      DetailConfiguration detailConfig;

      foreach( DataGridDetailDescription detailDescription in dataGridDetailDescriptionCollection )
      {
        detailConfig = detailConfigurationCollection[ detailDescription.RelationName ];

        if( detailConfig == null )
        {
          if( autoCreateDetailConfigurations )
          {
            detailConfig = new DetailConfiguration();

            detailConfig.SetIsAutoCreated( true );
            detailConfig.RelationName = detailDescription.RelationName;
            detailConfig.AutoCreateForeignKeyConfigurations = autoCreateForeignKeyConfigurations;
            detailConfig.AutoRemoveColumnsAndDetailConfigurations = autoRemoveUnassociated;
            detailConfigurationCollection.Add( detailConfig );
          }
        }

        if( detailConfig != null )
        {
          detailConfigWithAssociation.Add( detailConfig );
          detailConfig.SynchronizeWithDetailDescription( detailDescription );
        }
      }

      for( int i = detailConfigurationCollection.Count - 1; i >= 0; i-- )
      {
        detailConfig = detailConfigurationCollection[ i ];

        if( !detailConfigWithAssociation.Contains( detailConfig ) )
        {
          detailConfig.DetachFromDetailDescription();

          if( ( autoRemoveUnassociated ) && ( detailConfig.IsAutoCreated ) )
          {
            DetailConfiguration.CleanupDetailConfigurations( detailConfig.DetailConfigurations, autoRemoveUnassociated );
            detailConfigurationCollection.RemoveAt( i );
          }
        }
      }
    }