回答編集履歴

4

軽微な訂正

2020/10/08 08:39

投稿

Automatic9045
Automatic9045

スコア313

test CHANGED
@@ -44,7 +44,7 @@
44
44
 
45
45
 
46
46
 
47
- 今回の質問のコードに照らし合わせると、ViewになるのはWindowクラスです。
47
+ 今回の質問のコードに照らし合わせると、ViewになるのはMainWindowクラスです。
48
48
 
49
49
  また、ViewModelに相当するクラスを新たに作り、その中にPeaceプロパティとボタンクリック時のメソッドを含ませるのが良いと思います。
50
50
 

3

説明を若干追加

2020/10/08 08:39

投稿

Automatic9045
Automatic9045

スコア313

test CHANGED
@@ -64,6 +64,8 @@
64
64
 
65
65
  // BindableBaseがINotifyPropertyChangedを実装してくれています。
66
66
 
67
+ // MainWindowなどのDataContextにこのクラスのインスタンスを指定して下さい。
68
+
67
69
  public class MainWindowViewModel : BindableBase
68
70
 
69
71
  {

2

MVVMについて追記

2020/10/07 08:57

投稿

Automatic9045
Automatic9045

スコア313

test CHANGED
@@ -24,6 +24,90 @@
24
24
 
25
25
 
26
26
 
27
+ ##(追記)参考:MVVMに沿った設計
28
+
29
+ WPFアプリはMVVMという設計思想に沿って設計するのが一般的となっています。
30
+
31
+ MVVMはModel-View-ViewModelの略で、
27
32
 
28
33
 
34
+
35
+ - ウィンドウやユーザーコントロールなど、画面への表示に直接関与するクラスをView
36
+
37
+ - ViewにBindingするプロパティを持つクラスをViewModel
38
+
39
+ - ロジックなどを持つクラスをModel
40
+
41
+
42
+
43
+ というように、クラスのメンバの役割によってクラスを分離し、コードを読みやすくすることが出来ます。
44
+
45
+
46
+
47
+ 今回の質問のコードに照らし合わせると、ViewになるのはWindowクラスです。
48
+
49
+ また、ViewModelに相当するクラスを新たに作り、その中にPeaceプロパティとボタンクリック時のメソッドを含ませるのが良いと思います。
50
+
51
+
52
+
53
+ 私がPrismerなのでPrismを利用して書きますが、ViewModelクラスは以下のような感じになります。
54
+
55
+ 実行環境が手元に無いので、もしかしたら動かないかもしれません。動かなかった場合はごめんなさい。
56
+
57
+ ```C#
58
+
59
+ //using Prism.Mvvm;
60
+
61
+ //using Prism.Commands;
62
+
63
+
64
+
65
+ // BindableBaseがINotifyPropertyChangedを実装してくれています。
66
+
67
+ public class MainWindowViewModel : BindableBase
68
+
69
+ {
70
+
71
+ public Peaces Peace
72
+
73
+ {
74
+
75
+ get => board.peace;
76
+
77
+ set => SetProperty(ref board.peace, value);
78
+
79
+ }
80
+
81
+
82
+
83
+ // MVVMでは、ボタンクリック時のメソッドなどもVMに書きます。
84
+
85
+ // Xaml内のButtonの「Clicked="〜"」を「Command="{Binding ButtonClicked}"」に書きかえておいて下さい。
86
+
87
+ public DelegateCommand ButtonClicked { get; set; }
88
+
89
+
90
+
91
+ Board board = null;
92
+
93
+
94
+
95
+ public MainWindowViewModel()
96
+
97
+ {
98
+
99
+ ButtonClicked = new DelegateCommand(() => board = new Board());
100
+
101
+ }
102
+
103
+ }
104
+
105
+ ```
106
+
107
+
108
+
109
+ ##その他気になったこと
110
+
29
- それと、実行環境が手元に無いので確証は持てないのですが、Bindingの書き方がジャグ配列の形式(配列名[x][y])になっているのは大丈夫すか?
111
+ - Bindingの書き方がジャグ配列の形式(配列名[x][y])になっていますが、Peace[x,y]ないと正しく取得出来ません。
112
+
113
+ - PeaceではなくPieceではないでしょうか?

1

誤字の修正

2020/10/07 08:45

投稿

Automatic9045
Automatic9045

スコア313

test CHANGED
@@ -24,4 +24,6 @@
24
24
 
25
25
 
26
26
 
27
+
28
+
27
- それと、実行環境が手元に無いので確証は持ないのですが、Bindingの書き方がジャグ配列の形式('''配列名[x][y]''')になっているのは大丈夫ですか?
29
+ それと、実行環境が手元に無いので確証は持ないのですが、Bindingの書き方がジャグ配列の形式(配列名[x][y])になっているのは大丈夫ですか?