LoginSignup
0
0

More than 3 years have passed since last update.

MVVM Show View パターン2 Commandパラメータ

Last updated at Posted at 2020-09-24

参考コード

ICommandインターフェイスを実装したコマンドを利用して、表示します。

MVVM_WindowCommands
https://github.com/mike-eason/MVVM_WindowCommands
のコードを見てみましょう。

View

コマンドを指定して、そのパラメータにウインドウ名を指定しています。

  <Button Content="Open Window"
                    Command="{Binding OpenWindowCommand}"
                    CommandParameter="{x:Type local:TestWindow}"/>

ViewModel

OpenWindowCommand

   public class MainWindowViewModel
    {
        public OpenWindowCommand OpenWindowCommand { get; private set; }
        public ShowDialogCommand ShowDialogCommand { get; private set; }

        public MainWindowViewModel()
        {
            OpenWindowCommand = new OpenWindowCommand();
            ShowDialogCommand = new ShowDialogCommand(PostOpenDialog, PreOpenDialog);
        }

Commandクラス(Modelに該当する部分?)

ここで、Showしています。
ViewとViewModel以外は、すべてModelと考えますから、この部分もModelという認識で良いと思いますが、どうでしょうか。(VMのコードで、modelに相当するものではなく、単にView・ViewModelではないという意味で)

   public class OpenWindowCommand : ICommand
    {

        protected virtual void OpenWindow(Window wnd)
        {
            wnd.Show();
        }

分からない点

この処理の流れで、TestWindowを確定して表示を行っているのはどこでしょうか?
Viewでしょうか、ViewModelでしょうか、OpenWindowCommandでしょうか?
これは、x:Type local:TestWindow とTestWindowと名前を指定しているViewだと私は考えるのですが、違うのでしょうか?
ViewModelも、OpenWindowCommandも、引数を与えられて処理を行う部分ですから、TestWindowと確定しているわけではありません。
従って、TestWindowというViewを知っているのは、ViewのMainWindowだと私には思えます。そうすると、基本パターン1と、同じですね。基本パターン1はコードビハインドで、Viewから指定したViewを表示していますが、このパターンは、XAMLでコマンドを利用して、Viewから指定したViewを表示します。

TestWindowを指定するところを変更する場合

けれども、XAMLで

CommandParameter="{x:Type local:TestWindow}"

を指定せず、

  • MainWindowViewModelでTestWindowを指定する → VMが他のViewを知っている
  • OpenWindowCommandでTestWindowを指定する  → Mが他のViewを知っている

ことになると考えますが、この考え方で合っているでしょうか。

記事予定

0
0
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0