MVVM Light WPFアプリケーションでランタイムローカライズの変更機能を実装する正しい方法は何ですか?私はリソースベースのローカリゼーション(.resxファイル)を使用しています。ほとんどの場合、ロケールを変更するオプションが必要です。 LocalizationChanged
イベントにApp.xaml.cs
にグローバルプロパティをすることについての最初のMVVMライトとランタイムローカライゼーションの変更
私も、すべてのビューに配線さが、これはMVVMの少なくとも2つのルールを違反する:彼らはなりますので、一緒にコードビハインドとカップリングViewクラスのコードを持っていませんアプリケーションクラスに依存
もう一つのアイデアは、その後LocalizationChanged
を登録するためのインタフェースを提供(MVVM光の魔法を経由して、実行時に注入された)LocalizableModel
クラスによって実装されるグローバル・インタフェースILocalizableModel
を作成することでした(それはそれらをテストユニットに難しくなります)新しいローカリゼーションを設定するためのイベントと方法(および使用可能なローカリゼーションを列挙するような他の機能もあります)。このイベントは、ViewModelクラスで発生し、すべてのプロパティを更新するよう要求します。これには別の問題があります。一部のViewデータ(リストなど)は、再作成せずに更新できません。また、ViewModelのView固有のコードを扱うこともちょっと違っているようです。
もう1つのアイデアはObservatorパターンまたはモデル内に配線された自動プロパティを使用することです。
しかし、「正しい」MVVMのやり方は何ですか?
1)MVVMはコードベネンドでコードを持つことを禁じません。コードビハインドでは、ビューロジックに関係しないコードを避けるだけです。 2)ローカリゼーションはビューの責任であり、なぜこれらのすべてをビューモデルに持ち込みたいのですか? – Dennis
@Dennis一部のローカリゼーションはモデル内でも使用されていますが、ローカライズされたバージョンのリソースをデータベースから取得する必要があります – PiotrK