さて、MVVMC (または MVCVM) パターンを使用して、WPF で Microsoft Prism を使用しています。
私の ChatModule には、一連のビュー、ビューモデル、および 1 つのコントローラーがあります。
私が持っているビューについて
- ChatAreaView - 読まれたチャット メッセージを表示します。これは TabControl 領域内でホストされるため、ユーザーと他のユーザーの間でチャット ウィンドウを作成したり、ファイル転送ウィンドウなどを作成したりできます。
- UserAreaView - これはユーザーのリストです。右クリックすると、ファイルの送信やささやきなど、それらと対話するためのコンテキスト メニューが表示されます。
- MessageAreaView - これは、ユーザーが他のすべてに送信されるメッセージを入力する場所です。
ビューごとに、対応する ViewModel があります。ChatAreaViewModel、UserAreaViewModel および MessageAreaViewModel。これらの ViewModel には、基本的にプロパティのみが含まれます。
たとえば、UserAreaViewModel は、本質的に単なる Name である User 型の構造体を定義します。実際、これはクラスの外で定義されていますが、それでも...それを使用しています。現在接続しているすべてのユーザーのリストを格納する ObservableCollection があります。また、ユーザーと対話するために定義された ICommand プロパティもあります。現在、SendFile、Whisper、Nudge があります。将来的にはさらに追加する予定です。
Controller は、これらのビューと ViewModel を作成し、それらを組み合わせます。それらを更新し、ViewModel を対応する View の DataContext として割り当て、ViewModel のすべての初期プロパティを設定します。モジュールの有効期間中、ユーザーの操作に反応し、ViewModel の各 ICommand プロパティに割り当てられた DelegateCommands を実行します。これらは、ViewModel 内のプロパティの状態をさらに変更します。
そのようなインターフェイスではなく、実際のタイプのビューとビューモデルを使用しています。
#region Views
ChatAreaView viewChatArea;
UserListView viewUserArea;
MessageView viewMessageArea;
LoginPromptView viewLoginPrompt;
#endregion
#region ViewModels
ChatAreaViewModel viewModelChatArea;
UserAreaViewModel viewModelUserArea;
MessageAreaViewModel viewModelMessageArea;
LoginPromptViewModel viewModelLoginPrompt;
#endregion
Views と ViewModels のインターフェースを定義し、具体的な実装ではなくコントローラー内でこれらのインターフェースを操作した場合、物事はよりすっきりと結合されなくなりますか? モジュール クラス (基本的に各モジュールのルート) のコンテナにそれらを登録することはできますか?
これを行うことで何を得る必要がありますか? ビューごとにインターフェイスを実装して、他のビューと区別するにはどうすればよいでしょうか? XAMLを持っていることを除いて、実際には何もしません...そしてViewModelは、特定のプロパティを持っていることを除いて、実際には何もしません。また、これらのプロパティは変更される可能性があります。たとえば UserAreaViewModel では、ユーザーが別のユーザーとさまざまな方法でやり取りできるように、さらにコマンドを追加する必要があります。
ここで誰か助けてくれませんか?心の中では、このようなものを抽象化する必要があると考えていますが、論理的な方法でそれを行うべきか、あるいはそうするのが賢明な考えであるかさえもよくわかりません。私は何を得なければなりませんか?
お時間をいただきありがとうございます。下の画像は、私が取り組んでいるものの例です。[新しいアイテムの追加] ボタンとすべてのスタイル設定は無視してください...それは私が今取り組んでいることではありません。