Obecnie pracuję nad projektem, w którym używam Caliburn do wiązania między View i ViewModel. Aby móc przełączać się między językami podczas wykonywania, mam oddzielne pliki zasobów zawierające wszystkie ciągi używane w aplikacji. Niektóre z, np. Textblock SMS-Wiązania są zobowiązane do jednego z zasobów łańcuchowych tak:Jak powiązać ciąg do dynamicznego zasobu za pomocą kodu w WPF
SampleView.xaml <TextBlock Text={DynamicResource Foo.Bar.Baz}
... />
Language.en-US.xaml <system:String x:Key="Foo.Bar.Baz">Im a string</system:String>
Gdy zmieniam kulturę mojej aplikacji na inny język, powiązanie z Foo.Bar.Baz powoduje, że aktualizacja łańcucha do nowego języka jest wykonywana w czasie wykonywania. Wspaniały!
Jednak niektóre właściwości tekstowych w aplikacji jest związany z ciągiem w ViewModel z Caliburn tak:
SampleView.xaml <TextBlock Text={Binding SampleText}
... />
SampleViewModel .cs public string SampleText { get; set; }
wartość SampleText
jest ustawiony do zasobu ciąg z Language.en-US.xaml tak: ... SampleText = Application.Current.FindResource("Foo.Bar.Baz") as string; ...
Niestety, po zmianie kultury aplikacji ciąg znaków SampleText
nie jest aktualizowany.
Pytanie brzmi zatem: Jak ustawić SampleText na zasób ciągów z Language.en-US.xaml, który automatycznie zaktualizuje się po zmianie kultury aplikacji?
UWAGA: Przez komentarzach na this StackOverflow question Czytałem, że było to możliwe dzięki bindnig tak: SampleText = Application.Current.Resource["Foo.Bar.Baz"] as string;
to jednak nie dla mnie.
Czy Twoja klasa SampleViewModel wdrożyć INotifyPropertyChanged? Czy ustawiasz ponownie właściwość SampleText (w kodzie) po zmianie kultury aplikacji? –
Tak 'SampleViewModel' implementuje' Conductor