現在、Caliburn を使用して View と ViewModel をバインドするプロジェクトに取り組んでいます。実行時に言語を切り替えることができるようにするために、アプリケーションで使用されるすべての文字列を含む別のリソース ファイルを用意しています。たとえば TextBlock Text-bindings の一部は、次のように文字列リソースの 1 つにバインドされます。
SampleView.xaml
<TextBlock Text={DynamicResource Foo.Bar.Baz}
.../>
Language.en-US.xaml
<system:String x:Key="Foo.Bar.Baz">Im a string</system:String>
アプリケーションのカルチャを別の言語に変更すると、Foo.Bar.Baz への動的バインディングにより、実行時に文字列が新しい言語に更新されます。すごい!
ただし、アプリケーションのテキスト プロパティの一部は、次のように Caliburn を使用して ViewModel の文字列にバインドされています。
SampleView.xaml
<TextBlock Text={Binding SampleText}
.../>
SampleViewModel.cs
public string SampleText { get; set; }
の値は、SampleText
次のように Language.en-US.xaml の文字列リソースに設定されます。
...
SampleText = Application.Current.FindResource("Foo.Bar.Baz") as string;
...
残念ながら、アプリケーション カルチャを変更しても、文字列SampleText
は更新されません。
したがって、問題は、 SampleText を Language.en-US.xaml の文字列リソースに設定して、アプリケーション カルチャを変更すると自動的に更新されるようにするにはどうすればよいかということです。
注:このStackOverflowの質問に対するコメントを通じて、次のようなbindnigを通じて可能であると読みました:
SampleText = Application.Current.Resource["Foo.Bar.Baz"] as string;
しかし、これは私にとってはうまくいきませんでした。