5

我目前正在开发一个项目,我使用 Caliburn 在 View 和 ViewModel 之间进行绑定。为了能够在运行时切换语言,我有单独的资源文件,其中包含应用程序中使用的所有字符串。一些例如 TextBlock 文本绑定绑定到字符串资源之一,如下所示:

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 问题的评论,我了解到可以通过这样的绑定: SampleText = Application.Current.Resource["Foo.Bar.Baz"] as string; 但是,这对我不起作用。

4

1 回答 1

2

您可以将资源引用为 DynamicResource。要在后面的代码中执行此操作:

frameworkElement.SetResourceReference(dependencyProperty, resourceKey);

例如:

mySampleTextBlock.SetResourceReference(TextProperty, "Foo.Bar.Baz")
于 2015-10-09T04:19:32.310 回答