私はソースコードをチェックしましたが、BLocがそれをしたとは思わないのです。しかし、私は同じ結果をアーカイブする別の方法を見つけました。
thisの回答に基づいて、私はこの解決策を考え出しました。ビューにリソースキーを与える代わりに、リソース値を与えます。カルチャーが変更された場合、値も変更されます。これはコア実装です。
public class MyViewModel : INotifyPropertyChanged {
public MyViewModel()
{
// Properties.Resources is my Resources.resx file and String1 is my resource key
BindPropertyToResource(nameof(Name), nameof(Properties.Resources.String1));
}
private string _name;
public string Name
{
get
{
return _name;
}
set
{
if (_name != value)
{
_name = value;
OnPropertyChanged();
}
}
}
protected void BindPropertyToResource(string propertyName, string resourceKey){
WPFLocalizeExtension.Providers.ResxLocalizationProvider resxLocalizationProvider
= WPFLocalizeExtension.Providers.ResxLocalizationProvider.Instance;
WPFLocalizeExtension.Providers.ResxLocalizationProvider.SetDefaultAssembly(resxLocalizationProvider, System.Reflection.Assembly.GetCallingAssembly().GetName().Name);
WPFLocalizeExtension.Providers.ResxLocalizationProvider.SetDefaultDictionary(resxLocalizationProvider, nameof(Properties.Resources));
var targetProperty = this.GetType().GetProperty(propertyName);
var locBinding = new WPFLocalizeExtension.Extensions.LocTextExtension(resourceKey);
locBinding.SetBinding(this, targetProperty);
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName]string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
#endregion // INotifyPropertyChanged Members
}
この回避策が問題を解決することを願っています。
私は同じ問題を抱えています。解決策は見つかりましたか? –