我的意图是,当用户单击按钮导航到另一个页面时,他将看到一个进度,直到另一个页面完全加载。
我找到了很多关于这个主题的教程,但是它们都使用了后面的代码。我希望能够不使用任何代码隐藏(如果可能)。我目前正在将 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,同时它正在执行逻辑和方法。