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

回答編集履歴

1

サンプルコードを追加

2020/11/23 13:03

投稿

Automatic9045
Automatic9045

スコア313

answer CHANGED
@@ -1,10 +1,86 @@
1
1
  こんばんは。
2
2
 
3
3
  Prismを利用されているとのことなので、MVVMパターンに従って開発しているということで宜しいでしょうか。
4
- 私が作るとしたら、
4
+ 完全コンストラクタを遵守するとして私が作るとしたら、
5
5
 
6
- - Model…読み取り専用のクラス
6
+ - Model…完全コンストラクタのクラス
7
- - ViewModel…DataGridにバインドし、Modelのクラスを書き換え為のクラス
7
+ - ViewModel…DataGridにバインドし、書き換えられたらModelのクラスを更新するクラス
8
8
 
9
9
  とすると思います。
10
- 多分これが一番綺麗にまとまります。
10
+ 多分これが一番綺麗にまとまります。
11
+
12
+ ##サンプルコード
13
+ ###Model (C#)
14
+ ```C#
15
+ // 参照関連面倒なので構造体にしてあります。クラスに書き換える場合は参照渡しになるので注意して下さい。
16
+ public struct NameIndexPair
17
+ {
18
+ // プロパティの名前は適当です
19
+ public string Name { get; }
20
+ public int Index { get; }
21
+
22
+ public NameIndexPair(string name, int index)
23
+ {
24
+ Name = name;
25
+ Index = index;
26
+ }
27
+ }
28
+
29
+ public class MainClass
30
+ {
31
+ public MainClass()
32
+ {
33
+ public List<NameIndexPair> NameIndexPairs { get; } = new List<NameIndexPair>()
34
+ {
35
+ new NameIndexPair("あああ", 123),
36
+ new NameIndexPair("いいい", 456),
37
+ };
38
+ }
39
+ }
40
+ ```
41
+
42
+ ###MainWindow (XAML)
43
+ ```XAML
44
+ <Window …略…>
45
+ <StackPanel>
46
+ <DataGrid ItemsSource="{Binding Items}" />
47
+ </StackPanel>
48
+ </Window>
49
+ ```
50
+
51
+ ###MainWindow (C#)
52
+ ```C#
53
+ public class MainWindow : Window
54
+ {
55
+ public MainWindow()
56
+ {
57
+ InitializeComponent();
58
+ DataContext = new MainWindowViewModel();
59
+ }
60
+ }
61
+ ```
62
+
63
+ ###ViewModel
64
+ ```C#
65
+ //using Prism.Mvvm;
66
+ //using Prism.Commands;
67
+
68
+ public class MainWindowViewModel : BindableBase
69
+ {
70
+ public MainClass M { get; } = new MainClass();
71
+ public ObservableCollection<NameIndexPair> Items { get; } = new ObservableCollection<NameIndexPair>();
72
+
73
+ public MainWindowViewModel()
74
+ {
75
+ M.NameIndexPairs.ForEach(p => Items.Add(p));
76
+ Items.CollectionChanged += (sender, e) =>
77
+ {
78
+ M.NameIndexPairs = new List();
79
+ Items.ForEach(p => M.NameIndexPairs.Add(p));
80
+ };
81
+ }
82
+ }
83
+ ```
84
+
85
+ 実行環境が手元に無いので動作確認出来ていません。ごめんなさい。
86
+ もし動かなかったら言って下さい。