いままでWinformsでしか開発してこなかったので、WPFでの開発に戸惑っています。正直「わからないことがわからない」レベルで躓いていて、検索結果を見ても???という状態です。お詳しい方がいればご教授いただけると幸いです。
前提条件
- Visual Studio 2017 C# 7.3
- WPFの各画面は Prism と ReactiveProperty で開発しようとしている
やりたいこと
- WPFで、各画面に共通して独自のツールバーを画面上部に出したい。
- ツールバーにあるボタンの役割は各画面で同じ。例えば「検索ボタン」なら検索処理、「保存ボタン」なら保存処理が行われる。
- ボタンが押されたときの処理は各画面で若干違う。
わからないこと
- ユーザーコントロールのイベントを、それが配置された画面で処理する方法がわからない
(Winformsのようにユーザーコントロールのボタンのイベントを直接ハンドルすることはできない?)
知りたいこと
- そもそも、子コントロールや子画面で起きた処理をどのクラスが責任を持って処理すべきか自信を持ってないです。
今回のような例で、ユーザーコントロールに配置されたボタンが押されたときの処理はどのように実装すべきですか?
思いついたのは以下です。
0. 独自ツールバーの処理は親画面で責任を持つ:ユーザーコントロールにICommandを実装する。ユーザーコントロールはどのボタンが押されたかの引数と一緒にPublishする。親画面はxamlでユーザーコントロールのCommandをSubscribeするメソッドを1つ定義し、Commandに付帯する引数でどのボタンが押されたか識別して処理を振り分ける
⇒ ボタンが増えたときにif文をいろんなコードに追加する必要がありそう。
0. 独自ツールバーの処理は独自ツールバー側で完結させる:各ボタンの機能ごとにインターフェイスを定義する(ISavable, ISearchable等)。ボタンごとにどういった処理を行うのかの実装を、親画面のModelに対してインターフェイス実装する。ユーザーコントロールは初期化されるときに画面側からDIで親画面のModelを受け取り、各ボタンのCommandのSubscribe時にそのインターフェイスのメソッドを実行する。
⇒ ユーザーコントロールのVM⇒親画面のModelで処理⇒処理結果で親画面のModelの状態変更⇒親画面のVM経由で親画面のView状態変更、という流れ方をするはず。これがMVVM的にあっているかどうかがわからない
0. EventAggregatorで親画面-子コントロール間のイベント購読管理する?
あなたの回答
tips
プレビュー