xaml - ResourceLoader 在 ViewModel 中返​​回错误的语言

标签 xaml mvvm localization uwp

我正在使用 Template10 制作 UWP 应用程序,目前我的项目中有这个文件夹结构用于本地化:

Localization
|_en
|  |_Resources.resw
|_it-IT
   |_Resources.resw

默认的应用程序语言是 en,而我目前的文化是 it-IT。
资源文件是正确的,并且通过应用程序的行为是一致的,总是首先显示意大利语版本。

我在 View 后面的代码中使用 ResourceLoader 类就好了,但只要我在 ViewModel 中使用它,它总是返回英文本地化,即使它不存在(= 空字符串,虽然它存在于意大利语文件中) .

我在 VM 中使用它是因为我正在创建一个新角色并给它一个默认名称(“无名称”),作为用户的占位符,将名称绑定(bind)到 View 中。

这是我使用的代码:

public class CharacterManagerViewModel : ViewModelBase
{
    public Character Character { get; set; }
    private ResourceLoader loader = new ResourceLoader();

    public override async void OnNavigatedTo(object parameter, NavigationMode mode, IDictionary<string, object> state)
    {
        if (parameter == null)
        {
            //Creating a default empty character
            Character = new Character();
            Character.Name = loader.GetString("NewCharacterName");
        }
        else
        {
            //Loading from the Model
        }
    }
}

当我调用 GetString() 方法时,当前的文化就是 IT,但不知何故框架忽略了它。
我究竟做错了什么?

最佳答案

我找到了问题的根源:
在模型内部,为了简单起见,在我删减了代码的方法中,我从应用程序中包含的 XML 文件中为“Character”对象加载了一些数据。

在该方法中,我将文化更改为 InvariantCulture 以确保格式独立于用户的格式。
在该方法结束时,我将其更改回用户的文化,但出现了一些问题。

该问题发生在我进行双重交换之后,并且随后反射(reflect)到整个软件,即使对于来自 View 的本地化字符串也是如此。

这个问题不依赖于 ViewModel,我会解决这个问题,如果我找不到任何东西,我会发布一个新问题。

关于xaml - ResourceLoader 在 ViewModel 中返​​回错误的语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33356575/

相关文章:

c# - 单击按钮后更改按钮的效果 WPF

c# - 如何在 Silverlight 3.0 中将 Grid 的 Cursor 属性绑定(bind)到我的 ViewModel 的属性?

wpf - 在数据网格中编辑单元格时删除 stringFormat

c# - (WPF/MVVM) MainViewModel 中的单个实例

wpf - wpf 中的 StringFormat 本地化问题

c++ - 如何在 Windows 8 Metro (C++/XAML) 中制作循环/圆形 ScrollViewer

mvvm - 找不到在软件开发中应用最佳代码设计技术的最佳方法

wpf - 在 WPF 中重新计算可绑定(bind)对象的聚合?

python-plotly 相对于区域设置的日期格式

python - 我可以使用 GAE + python 2.7 + django.utils.translation 吗?