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

回答編集履歴

4

軽微な訂正

2020/10/08 08:39

投稿

Automatic9045
Automatic9045

スコア313

answer CHANGED
@@ -21,7 +21,7 @@
21
21
 
22
22
  というように、クラスのメンバの役割によってクラスを分離し、コードを読みやすくすることが出来ます。
23
23
 
24
- 今回の質問のコードに照らし合わせると、ViewになるのはWindowクラスです。
24
+ 今回の質問のコードに照らし合わせると、ViewになるのはMainWindowクラスです。
25
25
  また、ViewModelに相当するクラスを新たに作り、その中にPeaceプロパティとボタンクリック時のメソッドを含ませるのが良いと思います。
26
26
 
27
27
  私がPrismerなのでPrismを利用して書きますが、ViewModelクラスは以下のような感じになります。

3

説明を若干追加

2020/10/08 08:39

投稿

Automatic9045
Automatic9045

スコア313

answer CHANGED
@@ -31,6 +31,7 @@
31
31
  //using Prism.Commands;
32
32
 
33
33
  // BindableBaseがINotifyPropertyChangedを実装してくれています。
34
+ // MainWindowなどのDataContextにこのクラスのインスタンスを指定して下さい。
34
35
  public class MainWindowViewModel : BindableBase
35
36
  {
36
37
  public Peaces Peace

2

MVVMについて追記

2020/10/07 08:57

投稿

Automatic9045
Automatic9045

スコア313

answer CHANGED
@@ -11,5 +11,47 @@
11
11
  実装方法はご自身で調べてみて下さい。
12
12
  あるいは、PrismやMvvmLightなどのINotifyPropertyChanged実装を補助する外部フレームワークを利用するのも手です。
13
13
 
14
+ ##(追記)参考:MVVMに沿った設計
15
+ WPFアプリはMVVMという設計思想に沿って設計するのが一般的となっています。
16
+ MVVMはModel-View-ViewModelの略で、
14
17
 
18
+ - ウィンドウやユーザーコントロールなど、画面への表示に直接関与するクラスをView
19
+ - ViewにBindingするプロパティを持つクラスをViewModel
20
+ - ロジックなどを持つクラスをModel
21
+
22
+ というように、クラスのメンバの役割によってクラスを分離し、コードを読みやすくすることが出来ます。
23
+
24
+ 今回の質問のコードに照らし合わせると、ViewになるのはWindowクラスです。
25
+ また、ViewModelに相当するクラスを新たに作り、その中にPeaceプロパティとボタンクリック時のメソッドを含ませるのが良いと思います。
26
+
27
+ 私がPrismerなのでPrismを利用して書きますが、ViewModelクラスは以下のような感じになります。
28
+ 実行環境が手元に無いので、もしかしたら動かないかもしれません。動かなかった場合はごめんなさい。
29
+ ```C#
30
+ //using Prism.Mvvm;
31
+ //using Prism.Commands;
32
+
33
+ // BindableBaseがINotifyPropertyChangedを実装してくれています。
34
+ public class MainWindowViewModel : BindableBase
35
+ {
36
+ public Peaces Peace
37
+ {
38
+ get => board.peace;
39
+ set => SetProperty(ref board.peace, value);
40
+ }
41
+
42
+ // MVVMでは、ボタンクリック時のメソッドなどもVMに書きます。
43
+ // Xaml内のButtonの「Clicked="〜"」を「Command="{Binding ButtonClicked}"」に書きかえておいて下さい。
44
+ public DelegateCommand ButtonClicked { get; set; }
45
+
46
+ Board board = null;
47
+
48
+ public MainWindowViewModel()
49
+ {
50
+ ButtonClicked = new DelegateCommand(() => board = new Board());
51
+ }
52
+ }
53
+ ```
54
+
55
+ ##その他気になったこと
15
- それと、実行環境が手元に無いので確証は持てないのですが、Bindingの書き方がジャグ配列の形式(配列名[x][y])になっているのは大丈夫でか?
56
+ - Bindingの書き方がジャグ配列の形式(配列名[x][y])になっていが、Peace[x,y]でないと正しく取得出来ません。
57
+ - PeaceではなくPieceではないでしょうか?

1

誤字の修正

2020/10/07 08:45

投稿

Automatic9045
Automatic9045

スコア313

answer CHANGED
@@ -11,4 +11,5 @@
11
11
  実装方法はご自身で調べてみて下さい。
12
12
  あるいは、PrismやMvvmLightなどのINotifyPropertyChanged実装を補助する外部フレームワークを利用するのも手です。
13
13
 
14
+
14
- それと、実行環境が手元に無いので確証は持ないのですが、Bindingの書き方がジャグ配列の形式('''配列名[x][y]''')になっているのは大丈夫ですか?
15
+ それと、実行環境が手元に無いので確証は持ないのですが、Bindingの書き方がジャグ配列の形式(配列名[x][y])になっているのは大丈夫ですか?