在MVVM Light WPF應用程序中實現運行時本地化更改功能的正確方法是什麼?我正在使用基於資源的本地化(.resx文件),我想在幾乎任何時候都可以選擇更改區域設置。MVVM燈和運行時本地化更改
我雖然起初在做關於做全局屬性的App.xaml.cs
與LocalizationChanged
事件在每個視圖中連接起來,但是這至少違反了MVVM的兩條規則:沒有代碼隱藏代碼和耦合View類,因爲它們會依賴於應用程序的類(這將是很難單元測試它們)
另一個目的是創建全局接口ILocalizableModel
將由LocalizableModel
類(通過MVVM光魔在運行時注入)來實現,其然後提供接口寄存器LocalizationChanged
事件和方式來設置新的本地化(也可能是其他一些功能,如枚舉可用的本地化)。該事件將在ViewModel類中觸發並請求它們更新所有屬性。這還有另一個問題:某些視圖數據(如列表)不能在不重新創建的情況下進行更新。並且在ViewModel中強烈處理View特定的代碼也似乎有點扭曲的想法。
另一個想法是使用Observator模式或在模型中連線的自動屬性。
但是,什麼是「正確的」,MVVM的方式呢?
1)MVVM並不禁止在代碼中使用代碼。它只是需要避免在代碼隱藏中與代碼邏輯無關的任何代碼。 2)本地化是一種視圖責任,爲什麼你想把所有這些東西帶入視圖模型? – Dennis
@丹尼斯在模型中也使用了一些本地化的資源,本地化版本的資源需要從數據庫中提取 – PiotrK