Изменяющиеся столбцы не отражаются во время выполнения

У меня проблема, когда я меняю ColumnDefinitions во время выполнения. Когда я делаю, столбцы Width не отражается сразу. Если я изменю размер текущего окна / usercontrol, то Width действительно отражает.

Я следую MVVM а у меня есть DependencyProperty что позволяет мне менять их по мере необходимости на Grid,

В настоящее время я использую то, что я использую, если я изменю размер окна и / или управляю Grid находится на...

public static void ColumnSpacerChanged(
            DependencyObject obj, DependencyPropertyChangedEventArgs e)
        {
            if (!(obj is Grid) || ((Grid)obj).ColumnDefinitions.Count == 0 || (int)e.NewValue == (int)e.OldValue)
                return;

            Grid grid = (Grid)obj;
            for (int i = 0; i < grid.ColumnDefinitions.Count; i++)
            {
                if(grid.ColumnDefinitions[i].Tag != null && grid.ColumnDefinitions[i].Tag.ToString() == COLUMN_SPACER)
                {
                    grid.ColumnDefinitions[i] = new ColumnDefinition() { Width = new GridLength((int)e.NewValue, GridUnitType.Pixel), Tag = COLUMN_SPACER };
                }
            }

            grid.UpdateLayout(); // Tried this, but doesn't work

        }

Я пробовал следующее, и ни одна из них не работает.

 grid.UpdateLayout();
 grid.Refresh; // (off the parent)

Есть ли что-то, чего мне не хватает, когда я меняю ColumnDefinitions во время выполнения они сразу не отражаются?

1 ответ

Решение

Я нашел решение с некоторой помощью @Mike Strobel....

InvalidateArrange()

Это должно быть вызвано, чтобы сделать недействительным состояние расположения (макет) для элемента. После этого аннулирования элемент будет обновлен и отобразится асинхронно.

Другие вопросы по тегам