VB のたまご

作成日: 2017/03/19, 更新日: 2017/03/19



環境の準備

  •  それでは、実装を通して MVVM を学習していきましょう。 まずは、MVVM のインフラストラクチャである Livet を Visual Studio に追加します。Livet の実態は複数の dll で、参照追加して使います。 Livet を使うには、NuGet 経由で参照追加して使うか、プロジェクトテンプレートとしてインストールして使うかの2パターンがあります。

  • スポンサーリンク


  •  NuGet 経由の場合、NuGet はどちらかというとインストールというよりも【ダウンロード&参照追加の自動化】をプロジェクト単位でしているだけなので、 プロジェクトを作るたびに NuGet してくるのは面倒くさいです。それだったら、VS ギャラリーからインストーラーをダウンロード&セットアップした方が、 後々楽なので、ここでは VS ギャラリー経由で環境構築します。

  • イメージ
  •  ここ からダウンロードしてインストールします。 2017.3 現在は、Visual Studio 2015 までに対応しているインストーラーになっています。Visual Studio 2017、またはそれ以降の環境の場合は分からないです。 Livet のバージョンは、1.3 ですね。

  •  インストールが終わったら、さっそく Livet アプリケーションを作ってみましょう。

  •  Visual Studio を開いて、「ファイル」→「新規作成」→「プロジェクト」より、一覧画面が表示されますので、Visual Basic を選択しているのを確認後、 「Livet WPF 4.5 MVVM アプリケーション」を選択して、「OK」ボタンを押します。

  • イメージ
  •  作成されたらいったんビルドしましょう。これにより各プログラムの情報が最新になります。 これをしないと、例えば Xaml ファイルを表示しようとしても再ビルドするように指示されて、画面を見ることができないままになってしまいます。

  •  ソリューションのツリー構成を見てみます。フォルダが4つあって、「InfrastructureAssemblies」フォルダに、Livet のプログラムが配置されています。 「Livet.dll」の他に Expression Blend SDK に付随する「Microsoft.Expression.Interactions.dll」と「System.Windows.Interactivity.dll」があります。 WPF で業務アプリケーションを作成するのであれば、または別のインフラストラクチャ、例えば Prism などでも「Microsoft.Expression.Interactions.dll」と「System.Windows.Interactivity.dll」は使用しますので必須となる参照プログラムです。

  • イメージ
  •  「Views」、「ViewModels」、「Models」フォルダがありますが、これはもうそのままですね。責務の分離をするためにフォルダ分け(名前空間分け)されています。 フォルダ分けすることにより、単一アプリケーションのみでも動作できるようになるのですが、プログラム単位の粒度まで拡大して分割してもいいと思います(exe, dll, dll, ...)。

  •  各フォルダに配置された各ソースを見ると、いろいろ新しい記述が見られますね。今は分からなくても OK です。

  • スポンサーリンク


  •  それでは、コードビハインド編で勉強したことを思い出して、ボタンを押したらメッセージボックスが表示されるアプリケーションを作成してみます。 「MainWindow.xaml」を開いて、「Grid」タグ内にボタンを配置、クリックイベントを追加して、メッセージボックスを表示させましょう。 Grid タグは一番下に記載されています。

  •  ※サンプルソースは必要に応じて、全範囲を載せたり、一部の範囲を載せたり調整しますので注意してください。

  • MainWindow.xaml
    <Grid>
    
        <Button Content="button1" Click="Button_Click" />
    
    </Grid>
    

    MainWindow.xaml.vb
    Namespace Views
        ' ViewModelからの変更通知などの各種イベントを受け取る場合は、PropertyChangedWeakEventListenerや
        ' CollectionChangedWeakEventListenerを使うと便利です。独自イベントの場合はLivetWeakEventListenerが使用できます。
        ' クローズ時などに、LivetCompositeDisposableに格納した各種イベントリスナをDisposeする事でイベントハンドラの開放が容易に行えます。
        '
        ' WeakEventListenerなので明示的に開放せずともメモリリークは起こしませんが、できる限り明示的に開放するようにしましょう。
        '
        Class MainWindow
    
            Private Sub Button_Click(sender As Object, e As RoutedEventArgs)
    
                MessageBox.Show("Hello, Livet!")
    
            End Sub
    
        End Class
    End Namespace
    

  •  できたら実行してボタンを押してみてください。メッセージボックスが表示されたら OK です。

  •  これから、MVVM を学習していきますが、全部を全部、Livet アプリケーションを作成して体験するのではなく、 標準の WPF アプリケーションだけでも、またはコンソールアプリケーションだけでも学習できる場合はこちらで学習します。 土台から、基礎から理解した方がいいと思うからです。

  •  私の力量により、Livet アプリケーションに頼る面もあります。 これでは申し訳ないですので、私が理解でき次第、解説ページを改修して更新していこうと考えています。