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

回答編集履歴

1

まるごと変更通知

2025/08/24 13:28

投稿

TN8001
TN8001

スコア10180

answer CHANGED
@@ -104,4 +104,64 @@
104
104
 
105
105
  public record Commonクイズ(int 問題ID, string 問題文, string 選択肢1, string 選択肢2, string 選択肢3, string 選択肢4, string 解説, string 答え);
106
106
  ```
107
- ![アプリ動画](https://ddjkaamml8q8x.cloudfront.net/questions/2025-08-24/42c2c3ad-0128-418c-95b5-6299c13a4d30.gif)
107
+ ![アプリ動画](https://ddjkaamml8q8x.cloudfront.net/questions/2025-08-24/42c2c3ad-0128-418c-95b5-6299c13a4d30.gif)
108
+
109
+
110
+ ---
111
+
112
+ `Common`クラスは引数のコレクションに詰めるより、コレクションを返す実装のほうがクリーンかもしれません。
113
+
114
+ リアルタイムで問題の追加削除があるなら`ObservableCollection`がいいですが、問題の中身の編集もあるなら`Commonクイズ`に`INotifyPropertyChanged`実装が必要になってきます。
115
+ (そういうもろもろが面倒なので)単なる`List`にして何か変更(追加削除編集)がある度に、まるごと変更通知のほうが楽かもしれないですね^^
116
+
117
+ ```cs
118
+ namespace Ql63fphcbc3gg5l;
119
+
120
+ public partial class MainPage : ContentPage
121
+ {
122
+ public List<Commonクイズ> QuizItems { get; set; } = Common.歴史();
123
+
124
+ public MainPage()
125
+ {
126
+ InitializeComponent();
127
+ BindingContext = this;
128
+ }
129
+
130
+ private void OnButton_科学(object? sender, EventArgs e)
131
+ {
132
+ QuizItems = Common.科学();
133
+ OnPropertyChanged(nameof(QuizItems));
134
+ }
135
+
136
+ private void OnButton_編集(object? sender, EventArgs e)
137
+ {
138
+ QuizItems[0].問題文 = "aaa";
139
+ QuizItems = new(QuizItems); // 無駄だがListまるごと作り直し^^;
140
+ OnPropertyChanged(nameof(QuizItems));
141
+ }
142
+ }
143
+
144
+ public static class Common
145
+ {
146
+ private static readonly List<Commonクイズ> クイズ = [];
147
+
148
+ static Common() => データベースの読み込み_全部();
149
+
150
+ private static void データベースの読み込み_全部()
151
+ {
152
+ クイズ.Add(new(1, "歴史", "日本の最初の首都はどこ?", "京都", "奈良", "東京", "大阪", "710年から784年まで日本の都であった都市です。", "奈良"));
153
+ クイズ.Add(new(2, "科学", "地球上で最も豊富な元素は?", "酸素", "窒素", "水素", "鉄", "地殻の約46.6%を占めています。", "酸素"));
154
+ }
155
+
156
+ public static List<Commonクイズ> 歴史() => クイズ.Where(x => x.ジャンル == "歴史").ToList();
157
+ public static List<Commonクイズ> 科学() => クイズ.Where(x => x.ジャンル == "科学").ToList();
158
+ }
159
+
160
+ public record Commonクイズ(int 問題ID, string ジャンル, string 問題文, string 選択肢1, string 選択肢2, string 選択肢3, string 選択肢4, string 解説, string 答え)
161
+ {
162
+ public string 問題文 { get; set; } = 問題文;
163
+ }
164
+ ```
165
+
166
+ 問題や選択肢がランダムな順になるとより良いですね^^
167
+ [[C#] [MAUI] MAUIの情報(日本語)が少なくて困っています。[受付終了]](https://teratail.com/questions/q4dt5xzsk6ir41#reply-dv88olatbzmjmn)