我的意图是,当用户点击按钮导航到另一个页面时,他会看到进度,直到另一个页面完全加载。
我找到了很多关于这个主题的教程,但是所有教程都使用了代码。我希望能够不使用代码隐藏(如果可能)。我目前正在使用MvvmLight和ViewModelLocater。
我已经在我的视图中创建了一个虚拟网格,可以显示Progressring,并且我已将其活动和可见属性绑定到我的视图模型。
<Grid Background="Transparent" Visibility="{Binding LoadCircleVisibility}" Height="{Binding HeigthScreen}" Width="{Binding WidthScreen}" >
<ProgressRing Height="50" Width="50" IsActive="{Binding ProgressRingActive}" Visibility="{Binding ProgressRingVisibility}"></ProgressRing>
</Grid>
例如,当我从wcf服务获取数据时,我可以显示它,但是当用户导航到其他页面时却不能显示。
此时我试图通过消息传递进行此操作,但我不确定应该在哪里放置使我的进度可见的消息。
我的消息将始终通过此方法为进度设置正确的值:
private void ProggressBarVisible(bool visible)
{
if (visible)
{
ProgressRingVisibility = Visibility.Visible;
LoadCircleVisibility = Visibility.Visible;
}
else
{
ProgressRingVisibility = Visibility.Collapsed;
LoadCircleVisibility = Visibility.Collapsed;
}
ProgressRingActive = visible;
}
但是当我想导航到另一个页面时,没有进展。
所以问题是如何在mvvmlight加载新页面时显示进度。
编辑:部分解决方案:
我的导航速度较慢并且锁定了uithread的原因是因为它必须在整个页面上建立。我通过确保所有方法和逻辑都进入不同的线程来改变这一点,这确保我的uithread立即继续,并且我可以在执行逻辑和方法时在我的第二页上显示loadcircle。
答案 0 :(得分:0)
我不知道如何在没有代码的情况下做到这一点 您可以将根面板添加到您的应用程序并放置自定义控件。此自定义控件仅用于显示/隐藏预加载器。 当您卸载第一页(或其他事件)时,您将显示自定义预加载器;当你完成下载第二页时 - 你将隐藏自定义预加载器。