同步UI线程(从活动视图到非活动视图的数据透视项)

时间:2014-10-15 16:27:45

标签: windows-runtime task-parallel-library winrt-xaml windows-phone-8.1 ui-thread

我想将UI线程与视图中的更改(数据透视项1活动视图)同步,这些更改在更改开始时处于活动状态并切换到非活动状态(用户交互,例如将数据透视表项从透视项1更改为枢轴项目2)在完成更改之前。

更改永远不会发生,并且视图将恢复为从活动状态切换到非活动状态时的点。

组成的UI堆栈

的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状态,如果UI元素不在ACTIVE VIEW中,它不执行或跳过事件。

更新1:

情况如下:

包含两个透视项目的透视控件:

  • Pivot第一项包含:
  • ***的ScrollViewer
  • ******包含自定义进度条顶部刷新的网格
  • ****** ListView包含用户可以看到并与之交互的数据
  • ******包含自定义进度条底部刷新的网格
  • 数据透视第二项包含一些Richtextblock ...

当我从枢轴项目1进行刷新时,在自定义进度条消失之前,请滑动到下一个轴项目。

当我回到第一个枢轴项目时,当我想要刷新并且顶部或底部进度条仍然可见时,它被冻结。

我通过做一些技巧并在我的视图模型中添加了一些isVisible属性来解决这个问题,每当我在这个数据透视项目中我都会触发事件我调用updatelayout()并且现在它可以工作。

我认为问题来自于当我正在进行滑动时,UI线程取消所有操作并开始执行附加到活动视图的操作,这就是第一个枢轴项的更新布局事件永远不会触发的原因。 / p>

0 个答案:

没有答案