回答編集履歴
5
脱字
answer
CHANGED
@@ -34,6 +34,6 @@
|
|
34
34
|
0. `Model`を`Form`に参照させる
|
35
35
|
0. `Model`の特定のプロパティ(仮名:`Prop`)と`GroupBox`でデータバインディング
|
36
36
|
0. 同様に`Model.Prop`と`ListBox`でデータバインディング
|
37
|
-
0. `GroupBox`クリックイベントで`Model.Prop`の値を更新する処理を実装する
|
37
|
+
0. `GroupBox`のクリックイベントで`Model.Prop`の値を更新する処理を実装する
|
38
38
|
|
39
39
|
これで、`GroupBox`をクリックした時に、`ListBox`に表示する内容を変更することが出来るはずです。
|
4
文章の修正
answer
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
# 理想的な対処方法について
|
2
2
|
|
3
|
-
|
3
|
+
データバインディング(`Data Binding`)を使い、「画面のレイアウト」と「アプリケーションで取り扱うデータ」を**疎結合**にする(役割を分離する)ことです。
|
4
4
|
|
5
5
|
データバインディングとは、ざっくり言えば、
|
6
6
|
「データを保持するオブジェクト」と「フォーム、ウィンドウ、コントロールなどの画面、UI要素」を紐づける仕組みのことです。
|
7
7
|
もっとざっくり言えば、「モデル(データ)とビュー(画面)を紐づける仕組み」です。
|
8
|
-
※MVVMアーキテクチャにおいては、「ビューモデルとビューを紐づける仕組み」です。
|
8
|
+
※MVVMアーキテクチャにおいては、「ビューモデル(`ViewModel`)とビュー(`View`)を紐づける仕組み」です。
|
9
|
-
※以後、「モデル」と「ビュー」で説明をします。
|
9
|
+
※以後、「モデル(`Model`)」と「ビュー(`View`)」で説明をします。
|
10
10
|
|
11
11
|
データバインディングの何が美味いかというと、
|
12
12
|
- モデルの中身が更新されれば自動でビューも更新される
|
@@ -22,13 +22,13 @@
|
|
22
22
|
|
23
23
|
> ひたすらParentとControls[]でコントロールを辿っています。
|
24
24
|
|
25
|
-
を
|
25
|
+
を行う必要が無くなります。
|
26
26
|
|
27
27
|
> コントロールの追加、削除があった時に修正箇所
|
28
28
|
|
29
29
|
も非常に少なくなります。
|
30
30
|
|
31
|
-
実際に下記のような流れで実装してください。
|
31
|
+
実際に、下記のような流れで実装してください。
|
32
32
|
|
33
33
|
0. `Form`の画面表示に使うモデルクラス(仮名:`Model`)を作成
|
34
34
|
0. `Model`を`Form`に参照させる
|
@@ -36,4 +36,4 @@
|
|
36
36
|
0. 同様に`Model.Prop`と`ListBox`でデータバインディング
|
37
37
|
0. `GroupBox`クリックイベントで`Model.Prop`の値を更新する処理を実装する
|
38
38
|
|
39
|
-
これで、GroupBox
|
39
|
+
これで、`GroupBox`をクリックした時に、`ListBox`に表示する内容を変更することが出来るはずです。
|
3
文書構成を変更(伝えていることは同じなはず)
answer
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
# 理想的な対処方法について
|
2
2
|
|
3
3
|
理想はデータバインディングを使い、「画面のレイアウト」と「アプリケーションで取り扱うデータ」を**疎結合**にする(役割を分離する)ことです。
|
4
4
|
|
@@ -18,15 +18,22 @@
|
|
18
18
|
- 「どのビュー」に「どのモデルの中身」を「どんな形式」で表示するか
|
19
19
|
- どのモデルとやり取りをするか
|
20
20
|
|
21
|
-
|
21
|
+
# 質問のアプリケーションを疎結合にしたらどうなるか
|
22
22
|
|
23
23
|
> ひたすらParentとControls[]でコントロールを辿っています。
|
24
24
|
|
25
25
|
をやる必要が無くなります。
|
26
|
-
代わりに、下記のような流れで作ると「ListBox に表示される内容」はデータバインディングによって変更され、かつ疎結合な実装になります。
|
27
26
|
|
27
|
+
> コントロールの追加、削除があった時に修正箇所
|
28
|
+
|
29
|
+
も非常に少なくなります。
|
30
|
+
|
31
|
+
実際に下記のような流れで実装してください。
|
32
|
+
|
28
33
|
0. `Form`の画面表示に使うモデルクラス(仮名:`Model`)を作成
|
29
34
|
0. `Model`を`Form`に参照させる
|
30
35
|
0. `Model`の特定のプロパティ(仮名:`Prop`)と`GroupBox`でデータバインディング
|
31
36
|
0. 同様に`Model.Prop`と`ListBox`でデータバインディング
|
32
|
-
0. `GroupBox`クリックイベントで`Model.Prop`の値を更新する処理を実装する
|
37
|
+
0. `GroupBox`クリックイベントで`Model.Prop`の値を更新する処理を実装する
|
38
|
+
|
39
|
+
これで、GroupBox をクリックした時に、ListBox に表示する内容を変更することが出来るはずです。
|
2
文章の修正
answer
CHANGED
@@ -23,7 +23,7 @@
|
|
23
23
|
> ひたすらParentとControls[]でコントロールを辿っています。
|
24
24
|
|
25
25
|
をやる必要が無くなります。
|
26
|
-
代わりに、下記のような流れで作
|
26
|
+
代わりに、下記のような流れで作ると「ListBox に表示される内容」はデータバインディングによって変更され、かつ疎結合な実装になります。
|
27
27
|
|
28
28
|
0. `Form`の画面表示に使うモデルクラス(仮名:`Model`)を作成
|
29
29
|
0. `Model`を`Form`に参照させる
|
1
プロパティ名に数字を使うのは、よく考えたらサンプルでも嫌だなと思ったので消しました。
answer
CHANGED
@@ -27,6 +27,6 @@
|
|
27
27
|
|
28
28
|
0. `Form`の画面表示に使うモデルクラス(仮名:`Model`)を作成
|
29
29
|
0. `Model`を`Form`に参照させる
|
30
|
-
0. `Model`の特定のプロパティ(仮名:`
|
30
|
+
0. `Model`の特定のプロパティ(仮名:`Prop`)と`GroupBox`でデータバインディング
|
31
|
-
0. 同様に`Model.
|
31
|
+
0. 同様に`Model.Prop`と`ListBox`でデータバインディング
|
32
|
-
0. `GroupBox`クリックイベントで`Model.
|
32
|
+
0. `GroupBox`クリックイベントで`Model.Prop`の値を更新する処理を実装する
|