回答編集履歴

3 XxxConfig.Instance メソッド→XxxConfig.Instanceアクセサ

toydev

toydev score 271

2018/06/25 22:55  投稿

設定系の情報は共通の ViewModel に分けて定義し、個別画面毎の ViewModel にその参照を持たせる形に私はしています。
同じ1つの ViewModel を見ることによって設定画面での変更が即座に反映できるというわけです!(逆に個別画面側で変更した内容を設定画面に即座に反映することもできる)。
個別画面の ViewModel に設定情報のような共通 ViewModel の参照を設定する具体的な方法としては MVVM のフレームワークである Prism の DI コンテナを使用することを個人的にはお勧めします。
また、単に設定値の表示だけではなく、設定変更後に何らかの計算をする必要がある場合、個別画面毎の ViewModel で設定側の ViewModel の変更を監視することができます。
ViewModel の監視は ReactiveProperty というライブラリを使うのがお勧めです。
##### (追記)Binding だけで行う簡易的な方法
過去に使っていた Binding だけで行う簡易的な方法を思い出したので追記します。
設定系ViewModelをシングルトンにするのが許容できるのであれば、個別画面側のXAMLにObjectDataProviderで設定系ViewModelのシングルトンをリソースとして定義し、Bindingできます。
以下みたいな感じです。
- リソース定義(XxxConfigInstance メソッドでシングルトンが参照できる前提)
- リソース定義(XxxConfig.Instance アクセサでシングルトンが参照できる前提)
```C#
<ObjectDataProvider x:Key="XxxConfig" ObjectInstance="{x:Static Member=local:XxxConfig.Instance}" />
```
- リソースの参照個所 Binding
```XML
<ComboBox SelectedValue="{Binding Source={StaticResource XxxConfig}, Path=ConfigProperty1}">
 <!-- ... -->
</ComboBox>
```
2 Prismを使う前に使っていた方法を思い出したので本文に追記します。

toydev

toydev score 271

2018/06/25 22:49  投稿

設定系の情報は共通の ViewModel に分けて定義し、個別画面毎の ViewModel にその参照を持たせる形に私はしています。
同じ1つの ViewModel を見ることによって設定画面での変更が即座に反映できるというわけです!(逆に個別画面側で変更した内容を設定画面に即座に反映することもできる)。
個別画面の ViewModel に設定情報のような共通 ViewModel の参照を設定する具体的な方法としては MVVM のフレームワークである Prism の DI コンテナを使用することを個人的にはお勧めします。
以下は Prism ってなんぞ?という方向けの説明です。このページの DI コンテナの辺りの説明を読んでください。  
 
* [MVVM フレームワーク Prism の全体概観](https://qiita.com/toydev/items/cf1bb4b519e7e2453d46)  
 
また、単に設定値の表示だけではなく、設定変更後に何らかの計算をする必要がある場合、個別画面毎の ViewModel で設定側の ViewModel の変更を監視することができます。
ViewModel の監視は ReactiveProperty というライブラリを使うのがお勧めです。
ViewModel の監視は ReactiveProperty というライブラリを使うのがお勧めです。
##### (追記)Binding だけで行う簡易的な方法
過去に使っていた Binding だけで行う簡易的な方法を思い出したので追記します。
設定系ViewModelをシングルトンにするのが許容できるのであれば、個別画面側のXAMLにObjectDataProviderで設定系ViewModelのシングルトンをリソースとして定義し、Bindingできます。
以下みたいな感じです。
- リソース定義(XxxConfigInstance メソッドでシングルトンが参照できる前提)
```C#
<ObjectDataProvider x:Key="XxxConfig" ObjectInstance="{x:Static Member=local:XxxConfig.Instance}" />
```
- リソースの参照個所 Binding
```XML
<ComboBox SelectedValue="{Binding Source={StaticResource XxxConfig}, Path=ConfigProperty1}">
 <!-- ... -->
</ComboBox>
```
1 参照ページの読むべき個所を明記した。

toydev

toydev score 271

2018/06/24 15:03  投稿

設定系の情報は共通の ViewModel に分けて定義し、個別画面毎の ViewModel にその参照を持たせる形に私はしています。
同じ1つの ViewModel を見ることによって設定画面での変更が即座に反映できるというわけです!(逆に個別画面側で変更した内容を設定画面に即座に反映することもできる)。
個別画面の ViewModel に設定情報のような共通 ViewModel の参照を設定する具体的な方法としては MVVM のフレームワークである Prism の DI コンテナを使用することを個人的にはお勧めします。
以下は Prism ってなんぞ?という方向けの説明です。
以下は Prism ってなんぞ?という方向けの説明です。このページの DI コンテナの辺りの説明を読んでください。
* [MVVM フレームワーク Prism の全体概観](https://qiita.com/toydev/items/cf1bb4b519e7e2453d46)
また、単に設定値の表示だけではなく、設定変更後に何らかの計算をする必要がある場合、個別画面毎の ViewModel で設定側の ViewModel の変更を監視することができます。
ViewModel の監視は ReactiveProperty というライブラリを使うのがお勧めです。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る