回答編集履歴

1

サンプルコードを追加

2020/11/23 13:03

投稿

Automatic9045
Automatic9045

スコア313

test CHANGED
@@ -4,16 +4,168 @@
4
4
 
5
5
  Prismを利用されているとのことなので、MVVMパターンに従って開発しているということで宜しいでしょうか。
6
6
 
7
- 私が作るとしたら、
7
+ 完全コンストラクタを遵守するとして私が作るとしたら、
8
8
 
9
9
 
10
10
 
11
- - Model…読み取り専用のクラス
11
+ - Model…完全コンストラクタのクラス
12
12
 
13
- - ViewModel…DataGridにバインドし、Modelのクラスを書き換え為のクラス
13
+ - ViewModel…DataGridにバインドし、書き換えられたらModelのクラスを更新するクラス
14
14
 
15
15
 
16
16
 
17
17
  とすると思います。
18
18
 
19
19
  多分これが一番綺麗にまとまります。
20
+
21
+
22
+
23
+ ##サンプルコード
24
+
25
+ ###Model (C#)
26
+
27
+ ```C#
28
+
29
+ // 参照関連面倒なので構造体にしてあります。クラスに書き換える場合は参照渡しになるので注意して下さい。
30
+
31
+ public struct NameIndexPair
32
+
33
+ {
34
+
35
+ // プロパティの名前は適当です
36
+
37
+ public string Name { get; }
38
+
39
+ public int Index { get; }
40
+
41
+
42
+
43
+ public NameIndexPair(string name, int index)
44
+
45
+ {
46
+
47
+ Name = name;
48
+
49
+ Index = index;
50
+
51
+ }
52
+
53
+ }
54
+
55
+
56
+
57
+ public class MainClass
58
+
59
+ {
60
+
61
+ public MainClass()
62
+
63
+ {
64
+
65
+ public List<NameIndexPair> NameIndexPairs { get; } = new List<NameIndexPair>()
66
+
67
+ {
68
+
69
+ new NameIndexPair("あああ", 123),
70
+
71
+ new NameIndexPair("いいい", 456),
72
+
73
+ };
74
+
75
+ }
76
+
77
+ }
78
+
79
+ ```
80
+
81
+
82
+
83
+ ###MainWindow (XAML)
84
+
85
+ ```XAML
86
+
87
+ <Window …略…>
88
+
89
+ <StackPanel>
90
+
91
+ <DataGrid ItemsSource="{Binding Items}" />
92
+
93
+ </StackPanel>
94
+
95
+ </Window>
96
+
97
+ ```
98
+
99
+
100
+
101
+ ###MainWindow (C#)
102
+
103
+ ```C#
104
+
105
+ public class MainWindow : Window
106
+
107
+ {
108
+
109
+ public MainWindow()
110
+
111
+ {
112
+
113
+ InitializeComponent();
114
+
115
+ DataContext = new MainWindowViewModel();
116
+
117
+ }
118
+
119
+ }
120
+
121
+ ```
122
+
123
+
124
+
125
+ ###ViewModel
126
+
127
+ ```C#
128
+
129
+ //using Prism.Mvvm;
130
+
131
+ //using Prism.Commands;
132
+
133
+
134
+
135
+ public class MainWindowViewModel : BindableBase
136
+
137
+ {
138
+
139
+ public MainClass M { get; } = new MainClass();
140
+
141
+ public ObservableCollection<NameIndexPair> Items { get; } = new ObservableCollection<NameIndexPair>();
142
+
143
+
144
+
145
+ public MainWindowViewModel()
146
+
147
+ {
148
+
149
+ M.NameIndexPairs.ForEach(p => Items.Add(p));
150
+
151
+ Items.CollectionChanged += (sender, e) =>
152
+
153
+ {
154
+
155
+ M.NameIndexPairs = new List();
156
+
157
+ Items.ForEach(p => M.NameIndexPairs.Add(p));
158
+
159
+ };
160
+
161
+ }
162
+
163
+ }
164
+
165
+ ```
166
+
167
+
168
+
169
+ 実行環境が手元に無いので動作確認出来ていません。ごめんなさい。
170
+
171
+ もし動かなかったら言って下さい。