【问题标题】:Reload page in metro app C#在 Metro 应用程序 C# 中重新加载页面
【发布时间】:2012-09-10 09:47:45
【问题描述】:

我正在使用 Windows 8 RTM 和 C#(VS 2012 RTM) 开发 Metro 应用程序,但页面重新加载很困难, 谁能解释我如何重新加载页面而无需再次导航到同一页面。 简介:我正在开发支持多语言的 Metro 应用程序。当用户选择语言时,我将通过以下代码覆盖主要语言

Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = "de";

并使用此代码重新加载页面

this.Frame.Navigate(this.GetType());

语言更改为“de”,但是当我在页面上按“返回”时,它导航到同一页面而不是导航到上一页。我错过了什么,有人可以解释一下如何做到这一点。提前致谢

【问题讨论】:

  • Rajkumar,您找到解决方案或解决方法了吗?
  • 标记最佳答案非常有礼貌。

标签: c# xaml windows-8 windows-runtime


【解决方案1】:

这将刷新您的页面:

var _Frame = Window.Current.Content as Frame;
_Frame.Navigate(_Frame.Content.GetType());
_Frame.GoBack(); // remove from BackStack
  • 处理 OnNavigatingFrom() 可以保存页面的数据和状态。
  • 处理 OnNavigatingTo(),您可以加载页面的数据和状态。

需要注意的是,我的示例不考虑页面参数,您可能需要。 另外,另一个警告,我的示例会重新加载您的页面两次。但是 GoBack() 是从 BackStack 中删除新条目所必需的。与 WP 不同,Frame 没有 Refresh()。另外,BackStack 没有 Remove()。

更新

我不再使用上述方法。我用这个:

public bool Reload() { return Reload(null); }
private bool Reload(object param)
{
    Type type = this.Frame.CurrentSourcePageType;
    if (this.Frame.BackStack.Any())
    {
        type = this.Frame.BackStack.Last().SourcePageType;
        param = this.Frame.BackStack.Last().Parameter;
    }
    try { return this.Frame.Navigate(type, param); }
    finally { this.Frame.BackStack.Remove(this.Frame.BackStack.Last()); }
}

【讨论】:

  • 对于任何关心的人:使用(复杂)页面参数时,只需将参数存储在页面基类中。然后你只需将它传入:_Frame.Navigate(..., savedParameter)。为了防止加载两次(如果您在 NavigatedTo 中加载繁重,需要担心的事情)设置一个全局标志“IsReloading”。在onnavigatedto中如果设置为true,取消进一步加载,设置为false。
  • 示例比段落好得多。
  • 投稿比评论好很多
  • 只有在没有使用 SuspensionManager 保存 Frame 时才有效。如果框架已使用 SuspensionManager 保存,则 GoBack 方法以与以前相同的语言显示页面。有什么想法吗?
  • 是的,导航到正确的页面并传递正确的参数。
【解决方案2】:

我不确定我是否完全理解你想要做什么,所以这可能是错误的。

通过在刷新页面时调用该行代码,您正在创建当前类型的全新对象并导航到它,因此这不会保存用户在当前页面上所做的更改。

您是否使用任何类型的设计模式?对于这样的事情,我使用 MVVM(使用 MVVM 灯光库),它实现了一个非常酷的导航服务,可以控制这样的事情。

【讨论】:

  • 谢谢lookitskris,但我在这里没有使用MVVM模式,有什么方法可以在不创建新对象的情况下重新加载页面,请帮助我。
  • 查看 Frame 对象的 Refresh 方法
  • 看起来刷新在 WinRT 中的框架上不可用。 msdn.microsoft.com/en-us/library/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-09
  • 1970-01-01
  • 2018-03-18
  • 2015-01-01
  • 2014-09-08
  • 2021-10-01
  • 2011-09-09
相关资源
最近更新 更多