WPFことはじめ その1 MVVM

MVVM

Model-View-ViewModelの略です。
WPFがどうしてもこれに沿わないといけない、という決まりはないんですが、この考えに沿うとアプリが作りやすくなります。
MVCアーキテクチャとほとんど変わらない概念なのですが、もう一回復習ついでに書きます。

MVVMの基本

MVCとかMVVMとかの基本はアプリケーションの役割を以下の3つに分けることです。
無論、オブジェクト指向がベースです。
オブジェクト指向がベースなので、Modelはデータそのものというよりはその器を作るイメージがかなり大きいです。

  • Model:データの形を決めるためのクラス。どんなデータをどういった形でまとめるのか、をオブジェクトを意識してまとめるといい感じにまとまります。
  • View:GUIの一番表面的なモノ。WPFではXAMLが基本で、どの画面にどのパーツ(WPFではコントロールと言ったりする)を配置するかを書きます。極力それ以外は書かないようにします。
  • ViewModel:その名の通りViewとModelをつなげるためのクラス。ここには、Viewに載せるフィールドのプロパティを用意することがWPFでは求められます。

Example

なんかよくわからない気がするので簡単なWPFアプリを作ってみようと思います。

続きを読む

WPFことはじめ その0 WPFとは

そうだ、WPFやろう

  1. なんかデスクトップアプリケーションを作りたくなった。
  2. 研究でJavaのGUIを使っているのでどうにか、楽に作れるフレームワークでやりたい。
  3. 持ってる個人のPC、Windowsしかないから.NETでやろう
  4. せっかくならWPFを触ってみよう

と、いうことでWPFでアプリケーションを作っています。
XAMLとか触るの始めてなのでとりあえずいろいろメモしておきます。

WPFとは

Windows Presentation Foundationの略だそうです。

WPFの歴史

WindowsアプリケーションはXP以前まではWinFormsとかいうやつで作られていて、それはそれでかなり使える感じだったんですが、Vista以降GPU食うアプリが増えてきて(というか、OS自体がGPUを食うようになってきて)、それの対処と一緒にGUIのフレームワークを作っちゃえっていうノリのアレです。
そのため、WPFで作ったアプリは激しいCanvasの動きにも耐えられるとか何とか。

大分適当ですが、概ねこんなかんじだと思ってます。
結構なプログラマな方が「WPFすげえ」「WinFormsやめろ」ということを言っていてどんなもんじゃというのを知ってみようというのがモチベーションです。

WinFormsとWPFの違い

主にView部分が大分違います。
WinFormsはC#で自分でゴリゴリ部品を書くか、Visual Studioのデザイナーを使って配置します。
VSのデザイナはかなり完成度が高いほうだとは思うのですが、それでも配置を動的に作ったりするのがどうにもこうにも面倒でした。

WPFでは、WinFormsでのやり方に加え、XAMLというMicrosoftの独自規格のXMLっぽい何かを使ってViewを記述することで動的にフォームを増やしたり、モデルとフォームの分離をやりやすくしたりといったことを行っています。
XAMLは、最終的にコンパイルするときC#と同じような形になるため、XAMLで書けることはC#で全てかけます。ただし、書き方の制限はあるので逆は無理ですが。
XAMLを少し触ってみた感想としては、C#で書くと面倒なView処理を極力XAMLに投げることを意識するとコードがすっきりするように思えます。
大概のGUIのView部品はXAMLで書けるのでXAMLで書くのが難しい部分をC#に書くといった具合です。
ただ、かなり癖が強いのでなれるまでかなり時間がかかりました。
まだまだ、慣れませんが調べつつ書いていくしかなさそうです。

幸い、WPFはVista時代からある古いフレームワークでWindowsアプリケーションに用いられていることも幸いし、公式ドキュメントを始めとしてかなりの情報がWebに転がっています。
まあ、凝ったことをしようとするとアメリカ語の文書を読む羽目になるのはいつもどおりですが…

とりあえず次回からはWPFに必要な概念であるMVVM、XAMLで使ったコントロールの書き方、詰まった部分等々書いていきたいです。