【问题标题】:UWP MVVM: refresh page after change of languageUWP MVVM:更改语言后刷新页面
【发布时间】:2018-05-27 06:52:50
【问题描述】:

我的视图模型中有一些代码会更改应用程序语言,然后会更改某些控件上的文本。

这是DashboardViewModel,仪表板页面的数据上下文设置为:

ApplicationLanguages.PrimaryLanguageOverride = languageCode;
ResourceContext.GetForCurrentView().Reset();
ResourceContext.GetForViewIndependentUse().Reset();
NavigationService.Navigate(typeof(DashboardPage));

使用NavigationService.Navigate(typeof(DashboardPage)); 我试图强制刷新页面,但没有成功。我该怎么做?

【问题讨论】:

  • 你清除页面缓存了吗? stackoverflow.com/questions/32715690/…
  • @IgorŠevo 是的,结果相同。问题是Navigate 方法不会导航到同一页面。但是,可能因为我使用了 Windows Template Studio,我可以使用 NavigationService.cs 文件,所以我只是添加了一个不同的方法,它不执行 Navigate 方法所做的“同一页面检查”。我确定这不是一个好习惯,但它确实有效。 :-)

标签: c# mvvm uwp


【解决方案1】:

这条线很适合我。

 await Task.Delay(100);
 Frame.Navigate(this.GetType());

【讨论】:

  • 是的,它为我修复了 Navigate 没有重新绘制框架的问题。
【解决方案2】:

如果您尝试导航到同一页面,NavigationService.Navigate() 不会执行任何操作。

解决方法是在导航请求中添加一个参数来强制它。

NavigationService.Navigate(typeof(DashboardPage), "force refresh after language change");

【讨论】:

    【解决方案3】:

    我使用了类似于@Vincent 的方法,但使用DateTime.Now.Ticks 作为参数。这样可以确保参数的值会不同,从而触发刷新。

    NavigationService.Navigate(typeof(DashboardPage), DateTime.Now.Ticks);
    

    【讨论】:

      【解决方案4】:

      这似乎有效:

      Frame rootFrame = Window.Current.Content as Frame;
      rootFrame?.Navigate(typeof(MainPage));
      

      【讨论】:

        猜你喜欢
        • 2016-10-27
        • 1970-01-01
        • 1970-01-01
        • 2021-05-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多