teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

5

脱字

2019/11/12 02:31

投稿

BluOxy
BluOxy

スコア2663

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

文章の修正

2019/11/12 02:31

投稿

BluOxy
BluOxy

スコア2663

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 をクリックした時に、ListBox に表示する内容を変更することが出来るはずです。
39
+ これで、`GroupBox`をクリックした時に、`ListBox`に表示する内容を変更することが出来るはずです。

3

文書構成を変更(伝えていることは同じなはず)

2019/11/12 02:30

投稿

BluOxy
BluOxy

スコア2663

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

文章の修正

2019/11/12 02:26

投稿

BluOxy
BluOxy

スコア2663

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

プロパティ名に数字を使うのは、よく考えたらサンプルでも嫌だなと思ったので消しました。

2019/11/12 02:13

投稿

BluOxy
BluOxy

スコア2663

answer CHANGED
@@ -27,6 +27,6 @@
27
27
 
28
28
  0. `Form`の画面表示に使うモデルクラス(仮名:`Model`)を作成
29
29
  0. `Model`を`Form`に参照させる
30
- 0. `Model`の特定のプロパティ(仮名:`Prop1`)と`GroupBox`でデータバインディング
30
+ 0. `Model`の特定のプロパティ(仮名:`Prop`)と`GroupBox`でデータバインディング
31
- 0. 同様に`Model.Prop1`と`ListBox`でデータバインディング
31
+ 0. 同様に`Model.Prop`と`ListBox`でデータバインディング
32
- 0. `GroupBox`クリックイベントで`Model.Prop1`の値を更新する処理を実装する
32
+ 0. `GroupBox`クリックイベントで`Model.Prop`の値を更新する処理を実装する