2015-10-26 41 views
1

我正在與Template10一個UWP應用程序,我現在有我的項目,這裏面的文件夾結構本地化:的ResourceLoader返回錯誤的語言內部視圖模型

​​

默認應用程序語言爲en,而我目前的文化它是IT。 資源文件是正確的,通過應用程序的行爲是一致的,首先顯示意大利版本。

我在後面的View代碼中使用ResourceLoader類很好,但只要我在ViewModel中使用它,它總是返回英文本地化,即使它不存在(=空字符串,儘管它存在在意大利文件中)。

我在虛擬機內部使用它是因爲我創建了一個新的字符並給它一個默認名稱(「No name」),作爲用戶的佔位符,綁定了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,但不知該框架忽略它。 我在做什麼錯?

+0

如果我沒有弄錯,重要的是創建ResourceLoader時的當前文化,而不是當你調用GetString時的當前文化。您應該爲viewmodel使用顯式構造函數,並確保文化是正確的。如果這不起作用,你可以嘗試使用'ResourceLoader.GetForCurrentView()' –

+0

來構建你的ResourceLoader。謝謝,但那是行不通的。 在發佈之前,我嘗試在OnNavigatedTo事件中移動ResourceLoader初始化,但它是一樣的。 我也試過你的建議,但那不起作用。它仍然使用默認語言。 –

回答

0

我發現我的問題的起源: 在模型中,我爲了簡單起見在代碼中剪切了一個方法,我從包含在應用程序中的XML文件中加載「Character」對象的一些數據。

在該方法中,我將文化更改爲InvariantCulture以確保格式與用戶的格式無關。 在該方法結束時,我將其更改回用戶的文化,但有些出錯。

這個問題發生在我進行雙重交換之後,並且之後會反映到整個軟件中,即使對於來自視圖的本地化字符串也是如此。

這個問題不依賴於ViewModel,我會在這個問題上工作,如果我找不到任何東西,我會發佈一個新問題。