我想将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:
情况如下:
包含两个透视项目的透视控件:
当我从枢轴项目1进行刷新时,在自定义进度条消失之前,请滑动到下一个轴项目。
当我回到第一个枢轴项目时,当我想要刷新并且顶部或底部进度条仍然可见时,它被冻结。
我通过做一些技巧并在我的视图模型中添加了一些isVisible属性来解决这个问题,每当我在这个数据透视项目中我都会触发事件我调用updatelayout()并且现在它可以工作。
我认为问题来自于当我正在进行滑动时,UI线程取消所有操作并开始执行附加到活动视图的操作,这就是第一个枢轴项的更新布局事件永远不会触发的原因。 / p>