回答編集履歴
1
何点か意図が伝わりにくい部分があったので、表現を修正。また改行箇所を修正。
test
CHANGED
@@ -14,13 +14,11 @@
|
|
14
14
|
> Viewへの影響は無い(ようにするすべき)認識で合っていますか?
|
15
15
|
|
16
16
|
おっしゃりたいことが
|
17
|
-
「ViewModelの内部実装が変わっても、Viewに対してBindingしている
|
17
|
+
「ViewModelの内部実装が変わっても、Viewに対してBindingしているプロパティの仕様が変更されなければ、Viewに対する影響はない」
|
18
|
-
プロパティの仕様が変更されなければ、Viewに対する影響はない」
|
19
18
|
ということであれば、YESです。
|
20
19
|
|
21
|
-
客先から表示内容や入力について要件の追加・修正がなければ、
|
20
|
+
客先から表示内容や入力について要件の追加・修正がなければ、Viewは変更されないと思います。
|
22
|
-
Viewは
|
21
|
+
ViewModelはViewのためのものなので、Viewの仕様変更がなければ、ViewModelのI/F(== publicプロパティ)も変更されないと認識しています。
|
23
|
-
変更されないと認識しています。
|
24
22
|
|
25
23
|
|
26
24
|
(3)
|
@@ -29,15 +27,10 @@
|
|
29
27
|
> Model部でViewModelにデータセットすることで、
|
30
28
|
> Viewに自動反映させるイメージで大きく認識に相違無いですか?
|
31
29
|
|
32
|
-
「Model部でViewModelにデータセットする」という文章からは、
|
30
|
+
「Model部でViewModelにデータセットする」という文章からは、ModelがViewModelに依存しているというふうに読めます。
|
33
|
-
ModelがViewModelに依存しているというふうに読めます。
|
34
|
-
適切な参照方向は
|
35
|
-
View→ViewModel→Model
|
31
|
+
適切な参照方向は「View→ViewModel→Model」だと思います。
|
36
|
-
だと思います。
|
37
32
|
|
38
|
-
おっしゃりたいことが、INotifyPropertyChanged等で間接的に
|
39
|
-
ModelからViewModelに
|
33
|
+
(WPFのINotifyPropertyChanged等のObserverパターン的なイベント発行等によって)Modelから通知先が誰かわからない状態で値変更を通知伝搬していて、結果的にその通知先がViewModelになっている、ということを指しているのであれば、私もその認識です。
|
40
|
-
のであれば、私もその認識です。
|
41
34
|
|
42
35
|
|
43
36
|
(4)
|
@@ -47,26 +40,34 @@
|
|
47
40
|
> Model部で「共通データ」をViewModel1/2へセットすることで、
|
48
41
|
> View1/2に反映させる形がオーソドックスでしょうか?
|
49
42
|
|
50
|
-
複数の画面から同じデータを参照するとき、それはModelに属する
|
43
|
+
複数の画面から同じデータを参照するとき、それはModelに属するデータであると認識しています。つまり私の認識では「共通データ」はModel部に属します。
|
44
|
+
|
45
|
+
その共通データの出元ですが、VM1とVM2を両方知っている親ViewModelがいて、その親VMがDIコンテナを通じて共通データ(または共通データのファクトリ)を注入してもらい、それをVM1及びVM2に対してプロパティsetしているイメージです。
|
46
|
+
```C#
|
51
|
-
|
47
|
+
class ParentVm
|
48
|
+
{
|
52
|
-
|
49
|
+
private readonly _vm1;
|
53
|
-
|
50
|
+
private readonly _vm2;
|
51
|
+
public ParentVm(Func<ISharedData> dataFactory, IVm1 vm1, IVm2 vm2)
|
52
|
+
{
|
53
|
+
_vm1 = vm1;
|
54
|
+
_vm2 = vm2;
|
55
|
+
var data = dataFactory();
|
54
|
-
|
56
|
+
_vm1.Data = data;
|
57
|
+
_vm2.Data = data;
|
58
|
+
}
|
59
|
+
}
|
60
|
+
```
|
55
61
|
|
56
62
|
|
57
63
|
(5)
|
58
64
|
> ViewModelは橋渡しが主な役割の認識ですが、
|
59
65
|
> 簡単なデータ変換であれば実装しても良いものでしょうか?
|
60
66
|
|
61
|
-
BindingでのConverterのためにIValueConverterを実装するにあたって、
|
67
|
+
BindingでのConverterのためにIValueConverterを実装するにあたって、どのプロジェクトやパッケージに配置するのが適切か、という話でしょうか。
|
62
|
-
どのプロジェクトやパッケージに配置するのが適切か、という
|
63
|
-
話でしょうか。
|
64
68
|
|
65
|
-
表示要件でC#コードであるなら、クラスの配置としてはViewModelの
|
69
|
+
私は、表示要件でC#コードであるなら、クラスの配置としてはViewModelのパッケージが適切かと思っていました。
|
66
|
-
パッケージが適切かと思っています。
|
67
70
|
|
68
71
|
ただMVVMエキスパートの尾上様のブログ記事
|
69
72
|
https://ugaya40.hateblo.jp/entry/model-mistake
|
70
|
-
を見ると、ViewModelはできるだけ薄くする、ModelはUIを意識する、等との
|
73
|
+
を見ると、ViewModelはできるだけ薄くする、ModelはUIを意識する、等との記述がありますので、その線から考えるとModelに入れるべきなのかもしれません。
|
71
|
-
記述がありますので、その線から考えるとModelに入れるべきなのかもしれません。
|
72
|
-
|