在页面之间导航期间显示Progressring

时间:2013-04-23 07:26:24

标签: c# windows-runtime mvvm-light winrt-xaml

我的意图是,当用户点击按钮导航到另一个页面时,他会看到进度,直到另一个页面完全加载。

我找到了很多关于这个主题的教程,但是所有教程都使用了代码。我希望能够不使用代码隐藏(如果可能)。我目前正在使用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。

1 个答案:

答案 0 :(得分:0)

我不知道如何在没有代码的情况下做到这一点 您可以将根面板添加到您的应用程序并放置自定义控件。此自定义控件仅用于显示/隐藏预加载器。 当您卸载第一页(或其他事件)时,您将显示自定义预加载器;当你完成下载第二页时 - 你将隐藏自定义预加载器。