Ejemplo n.º 1
0
        void EnsureView(object source, Type collectionViewType)
        {
            if (_isInitializing || _deferLevel > 0)
            {
                return;
            }

            DataSourceProvider dataProvider = source as DataSourceProvider;

            // listen for DataChanged events from an DataSourceProvider
            if (dataProvider != _dataProvider)
            {
                if (_dataProvider != null)
                {
                    DataChangedEventManager.RemoveHandler(_dataProvider, OnDataChanged);
                }

                _dataProvider = dataProvider;

                if (_dataProvider != null)
                {
                    DataChangedEventManager.AddHandler(_dataProvider, OnDataChanged);
                    _dataProvider.InitialLoad();
                }
            }

            // if the source is DataSourceProvider, use its Data instead
            if (dataProvider != null)
            {
                source = dataProvider.Data;
            }

            // get the view
            ICollectionView view = null;

            if (source != null)
            {
                DataBindEngine engine     = DataBindEngine.CurrentDataBindEngine;
                ViewRecord     viewRecord = engine.GetViewRecord(source, this, collectionViewType, true,
                                                                 (object x) =>
                {
                    BindingExpressionBase beb = BindingOperations.GetBindingExpressionBase(this, SourceProperty);
                    return((beb != null) ? beb.GetSourceItem(x) : null);
                });

                if (viewRecord != null)
                {
                    view = viewRecord.View;
                    _isViewInitialized = viewRecord.IsInitialized;

                    // bring view up to date with the CollectionViewSource
                    if (_version != viewRecord.Version)
                    {
                        ApplyPropertiesToView(view);
                        viewRecord.Version = _version;
                    }
                }
            }

            // update the View property
            SetValue(ViewPropertyKey, view);
        }
Ejemplo n.º 2
0
        internal override DataGridCollectionViewBase EnsureDataGridCollectionViewBaseCore()
        {
            DataGridCollectionViewSource parentSource = this.ParentSource as DataGridCollectionViewSource;
            object             source             = parentSource.OriginalSource;
            Type               itemType           = parentSource.ItemType;
            DataSourceProvider dataSourceProvider = source as DataSourceProvider;

            if (dataSourceProvider != m_dataSourceProvider)
            {
                if (m_dataSourceProvider != null)
                {
                    DataChangedEventManager.RemoveListener(m_dataSourceProvider, this);
                }

                m_dataSourceProvider = dataSourceProvider;

                if (m_dataSourceProvider != null)
                {
                    DataChangedEventManager.AddListener(m_dataSourceProvider, this);
                    m_dataSourceProvider.InitialLoad();
                }
            }

            if (dataSourceProvider != null)
            {
                source = dataSourceProvider.Data;
            }

            IListSource listSource = source as IListSource;

            if (listSource != null)
            {
                source = listSource.GetList();
            }

            if (source == null)
            {
                return(null);
            }

            IEnumerable enumerableSource = source as IEnumerable;

            Debug.Assert(enumerableSource != null);

            DataGridCollectionViewBase currentView = this.CurrentView;

            if ((currentView != null) &&
                (currentView.SourceCollection == enumerableSource) &&
                (currentView.DesiredItemType == itemType))
            {
                // No changes.
                return(currentView);
            }

            return(new DataGridCollectionView(
                       enumerableSource,
                       itemType,
                       parentSource.AutoCreateItemProperties,
                       parentSource.AutoCreateDetailDescriptions,
                       parentSource.AutoCreateForeignKeyDescriptions));
        }