Closed TokugawaTakeshi closed 1 year ago
C#のプロパティのGet/Setはコンパイル時にゲッターとセッターが生成されるので、 ソースコードレベルでゲッターとセッターメソッドは作る必要は特にありませんね。 過去の流儀にそって、何かしらのコーディングルールで使い分けがある場合は明示的にメソッドを作ることがあります。 私のゲッターとセッターの書き方・使い分けは、 プロパティは、他の変数や外部に影響を与えない場合、他のパラメータを参照しているだけの時はプロパティで済ませて メソッドは、APIで問い合わせたり、連動して他のパラメータも書き変わる場合は専用の関数で実装しています。
まだ動作確認はしていない状態ですが、 TasksSharedStateManagerクラス内にパラメータが更新された時のNotifyStateChangedメソッドは定義されてますが、 TasksManagementPageContentに変更通知するStateHasChangedメソッドと関連付けられていないため currentlySelectedTaskプロパティの値が変更しても、画面側に変更通知が届いていない可能性があります。
具体的には、下記修正で画面に変更通知を伝える事ができるようになると見られます。 また、ページ切り替えた際、再度同じページを開くと変更通知を再登録してしまうので、 変更通知解除する処理を別途用意する必要があります。
@gummoni
解決です! ありがとうございます。
複数のコンポネントの間ステートを共有する課題です。 Vueだと、VuexとPiniaで、ReactだとReduxやMobXは同類です。
参考にしたのは下記のリンクの内容です。 https://qiita.com/yosgspec/items/3cf93e70a81805d70d29#blazor-17
分析
setBooks
、setDate
は余計の様な感じがします。 C#のゲッター・セッターはそのようなメソッドを作る必要を無くす為に導入されたはずです。私の場合
課題のカード(TaskCard)をクリックしたら、課題のマネージャー(TaskManager、多数形のTasksManagerと間違えないように気を付けて下さい)に課題の詳細が表示されてほしいです。
ステート管理を担当しているのは
TasksSharedStateManager
クラスです。表示更新の為に
onStateChanged
とNotifyStateChanged
だけ十分だったら、静的フィルドでも稼働するべき論理です。 この場合、インスタンスを作る必要性は分かりません。TasksManager
でonSelectTask
というメソッドはありますが、TasksSharedStateManager.currentlySelectedTask
を更新してもTasksManagementPageContent
でactiveTask
ゲッターは更新されません。原因を知りたいです。 @problem/state_managementブランチで見てもらえませんか?