Синхронизация потока пользовательского интерфейса (сводный элемент из активного в неактивное представление)

Я хотел бы синхронизировать поток пользовательского интерфейса с изменениями в представлении (активное представление элемента 1 сводки), которое активно, когда изменения начинаются, и переходить в неактивное состояние (взаимодействие с пользователем, например, изменение элемента сводки от элемента 1 сводки до элемента 2 сводки) до окончания изменений.

Изменения никогда не происходят, и представление восстанавливается как точка при переключении из активного в неактивное состояние.

Стек пользовательского интерфейса состоит из

ScrollViewer

  • сетка
  • Посмотреть список
  • сетка

Элементы управления сеткой содержат индикаторы выполнения для обновления

    private async void scrollViewer_ViewChanged2(object sender, ScrollViewerViewChangedEventArgs e)
    {
        var listView = scrollViewer.GetDescendantsOfType<ListView>().FirstOrDefault();
        var context = DataContext as IMainStreamViewModel;

        if (e.IsIntermediate) return;
        var dispatcher = CoreWindow.GetForCurrentThread().Dispatcher;

        if (Math.Abs(scrollViewer.VerticalOffset) < 0.01 && _isPullRefresh)
        {
            // Adding item the Observable collection that is the
            // the item source for the listview
            // The method just add element using the core dispatcher
            context.PullToRefreshInsertion_Top(dispatcher, listView);
        }
        else if (_scrollBar.Value >= _scrollBar.Maximum)
        {
            // same action but in bottom of the observable collection
            // The method just add element using the core dispatcher
            context.PullToRefreshAdd_Bottom(dispatcher, listView);
        }

        _isPullRefresh = false;
        // Set the current element to be displayed in the list view
        await dispatcher.RunAsync(CoreDispatcherPriority.Normal,
            () => listView.ScrollIntoView(listView.SelectedItem));
        // Scroll to the the listview and hidding the progress control
        await Task.FromResult(scrollViewer.ChangeView(null, 60, null));

    }

Наконец, элемент может быть добавлен, но просмотрщик прокрутки также не сбрасывает свою позицию и просмотр списка.

Как решить синхронизацию, я думаю, что проблема возникает из состояния IsActiveView, если элемент пользовательского интерфейса не находится в ACTIVE VIEW, он не выполняет или пропускает событие.

ОБНОВЛЕНИЕ 1:

Ситуация такова:

Элемент управления Pivot, содержащий два элемента Pivot:

  • Сводная позиция 1 содержит:
  • ***ScrollViewer
  • ****** Сетка, содержащая пользовательский индикатор обновления
  • ****** ListView, содержащий данные, которые пользователь может видеть и взаимодействовать с
  • ****** Сетка, содержащая пользовательское обновление нижней панели
  • Второй элемент Pivot содержит Richtextblock ...

Когда я выполняю вытягивание, чтобы обновить из сводного элемента один, и прежде чем исчезнет пользовательский индикатор выполнения, проведите пальцем к следующему элементу.

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

Я решил это, выполнив некоторый трюк и добавив свойство isVisible в мою модель представления, и я запускаю событие всякий раз, когда нахожусь в этом элементе сводки, я вызываю updatelayout(), и теперь это работает.

Я думаю, что проблема возникла из-за того, что когда я делаю свайп, поток пользовательского интерфейса отменяет все операции и начинает выполнять операции, связанные с активным представлением, поэтому событие обновления макета для первого элемента сводки никогда не запускается.

0 ответов

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