Example #1
0
 protected virtual void OnColumnActualWidthChanged(ColumnActualWidthChangedEventArgs e)
 {
     // We pass the delta between the old and new value to tell the Panel to reduce the horizontal offset when a column is auto-resized to a smaller value
     if (e != null)
     {
         this.IncrementVersion(new UpdateMeasureRequiredEventArgs(UpdateMeasureTriggeredAction.ColumnActualWidthChanged, e.OldValue - e.NewValue));
     }
     else
     {
         this.IncrementVersion(new UpdateMeasureRequiredEventArgs(UpdateMeasureTriggeredAction.ColumnActualWidthChanged));
     }
 }
        protected override bool OnReceivedWeakEvent(Type managerType, object sender, EventArgs e)
        {
            bool handled = false;
            bool detachFromDataGridContext = false;

            if (managerType == typeof(VisibleColumnsUpdatedEventManager))
            {
                this.IncrementVersion(new UpdateMeasureRequiredEventArgs(UpdateMeasureTriggeredAction.ColumnReordering));

                handled = true;
            }
            else if (managerType == typeof(CollectionChangedEventManager))
            {
                if (sender == this.DataGridContext.Items.SortDescriptions)
                {
                    this.IncrementVersion(new UpdateMeasureRequiredEventArgs(UpdateMeasureTriggeredAction.SortingChanged));
                }

                if (sender == this.DataGridContext.Items.GroupDescriptions)
                {
                    this.IncrementVersion(new UpdateMeasureRequiredEventArgs(UpdateMeasureTriggeredAction.GroupingChanged));
                }

                handled = true;
            }
            else if (managerType == typeof(ColumnActualWidthEventManager))
            {
                ColumnActualWidthChangedEventArgs args = e as ColumnActualWidthChangedEventArgs;

                // We pass the delta between the old and new value to tell the Panel to reduce the
                // horizontal offset when a column is auto-resized to a smaller value
                if (args != null)
                {
                    double delta = args.OldValue - args.NewValue;
                    this.IncrementVersion(new UpdateMeasureRequiredEventArgs(UpdateMeasureTriggeredAction.ColumnActualWidthChanged, delta));
                }
                else
                {
                    this.IncrementVersion(new UpdateMeasureRequiredEventArgs(UpdateMeasureTriggeredAction.ColumnActualWidthChanged));
                }

                handled = true;
            }
            else if (managerType == typeof(ViewChangedEventManager))
            {
                detachFromDataGridContext = true;
                this.IncrementVersion(new UpdateMeasureRequiredEventArgs(UpdateMeasureTriggeredAction.Unspecified));

                handled = true;
            }
            else if (managerType == typeof(ThemeChangedEventManager))
            {
                detachFromDataGridContext = true;
                this.IncrementVersion(new UpdateMeasureRequiredEventArgs(UpdateMeasureTriggeredAction.Unspecified));

                handled = true;
            }
            else if (managerType == typeof(DataGridControlTemplateChangedEventManager))
            {
                this.UpdateScrollViewer();
                this.IncrementVersion(new UpdateMeasureRequiredEventArgs(UpdateMeasureTriggeredAction.Unspecified));

                handled = true;
            }
            else if (managerType == typeof(ItemsSourceChangeCompletedEventManager))
            {
                detachFromDataGridContext = true;
                handled = true;
            }

            if (detachFromDataGridContext == true)
            {
                if (this.DataGridContext != null)
                {
                    // Detach the ColumnVirtualizationManager from the DataGridContext and detach from the DataGridContext
                    ColumnVirtualizationManager.SetColumnVirtualizationManager(this.DataGridContext, null);

                    this.Uninitialize();
                }
            }

            return(handled);
        }