2

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

我找到了很多关于这个主题的教程,但是它们都使用了后面的代码。我希望能够不使用任何代码隐藏(如果可能)。我目前正在将 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,同时它正在执行逻辑和方法。

4

1 回答 1

0

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

于 2013-04-23T08:29:49.743 回答