Visual Studio 2013 Preview の変更点をざっと

Windows 8.1 Preview – Microsoft Windows
http://windows.microsoft.com/ja-jp/windows-8/preview

Visual Studio 2013 Preview | Microsoft Visual Studio
http://www.microsoft.com/visualstudio/jpn/2013-preview

Visual Studio 2013 は Windows 8.1 でしかストアアプリの開発ができないので、両方をそろえる必要がある。第一番にやったのが、「ひと目でわかる~」のC#版のサンプルの起動。シミュレーター自体の起動が、最初ひっかかかるのだが、OS を再起動すればOKな模様。

image

外見上は問題ないので、このまま 2013 にコンバートすればOKかというとそうではないという話。

サンプルプログラムは、Visual Studio 2012 付属の「グリッドアプリケーション」をベースにして、アプリを組み立てることになっている。グリッドアプリケーションは、いくつかのクラスが自動でインストールされていて、スナップ表示やデータバインドが(多少)やりやすくなっている。

image

が、Visual Studio 2013 でグリッドアプリケーションのテンプレートを使うと、Common フォルダ配下がかなり異なっている。

image

MVVM に必須な(というか実装いている)BindableBase.cs ファイルがない。SampleData.json が増えている。ってことは、SampleDataSource クラスの中身が変わってしまっている可能性が高い。

image

SampleDataSourceを見てみると、案の定、単純な POJO クラスになっている。INotifyPropertyChanged インターフェースがないので、MVVM 自体をあきらめてしまているか、それとも別の実装の仕方をするか、というところであろう。なのでグリッドアプリケーションの場合は、個々のアイテムはプロパティの変更通知経由「ではない」ということになる。これは、ちょっと…まあ、グリッド表示自体はデータの変更をする必要がない(初回の読み込みのみ)ので、この実装でもいいのだが、2012 のテンプレートではデータ数やデータの変更を考慮したものになっているものの、2013 のテンプレートは「全く考慮していない」というコードになっている。まあ、いいんだけど。

もうひとつ、変更点が大きいところにスナップ表示がある。前々から 8.1 のスナップはサイズが可変になることが知っていたので、そのところの細かい言及は避けていたのだが、8.1 の XAML テンプレートには VisualStateManager の記述がない。え?そうなると、回転とかスナップはどうなると?と思ってみたが、シミュレーターで動かすと回転もスナップも OK。つまり、VisualStateManager を使わない(間接的に使ってる?)方式に代わっている。

image

まあ、2012 の VisualStateManager の記述は、Storyboard を使っているハック的な記述なので、消えてしまうに越したことはないのだが、独自にスナップとか回転とかに対応する場合はどうんですかね?基本ページを使えばOKですかね?という疑問は残る。動かしてみると、2012 ではグリッドアプリケーションはスナップに対応しているのだが、2013 のテンプレートはスナップに対応してない。

image

image

もともとが VisualStateManager を使って、ListView 形式に直しているので、同じ実装が 2013 のグリッドアプリケーションに求められるところだ…が、どうなるかよくわからない。

ApplicationViewState enumeration (Windows)
http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.viewmanagement.applicationviewstate.aspx

この API 自体が 8.1 で消えるようなことが書いてある(本当に消えるかどうかは分からない)ので、なんらかの対処をしてくると思う。たぶん、ぐだぐだなソースが。ちなみに、2012 にあった「状態記録の有効」という疑似的に Storyboard を作ってくれる機能までなくなってしまっているので、別の手段(手動?)が必要となる。

GroupedItemsPage クラスをよく見てみると、

public sealed partial class GroupedItemsPage : Page

ってことになっていて、便利な LayoutAwarePage を継承していない。LayoutAwarePage の中で回転などの制御を行っているので、2013 では自前ってことになる。まあ、中途半端なソースだと思うので、これが正式なのかはわからない。ただし、NavigationHelper という怪しげなクラスを作って、中身が LayoutAwarePage に似ているので、これを使うのだろう。Page クラスを継承して中間クラスを作る LayoutAwarePage  の方式よりも、一見ヘルパークラスのほうが良さげに見えるが、OnNavigatedTo なり OnNavigatedFrom なりで、いちいちヘルパークラスのメソッドを手動で呼び出さなければいけないので、保守性としてダメダメ。Page.OnNavigatedTo 等が protected なので、こういう処理になっているのだが、このダサい方法ならば、どうせテンプレート出力なので中間クラスを作ったほうが保守性は高い。まあ、このあたりもどうなるかわからない。

そんな訳で、結構ごっそりサンプルを書き換えないとダメなんだが、どうしたものか。プレビューの2013では、スナップや対応していない(ListView化されない)、回転は GridView コントロールのリサイズに頼っている状態なので、リサイズや回転に対応していない状態になる。ここが Microsoft のサンプルとして正式にどうなるのか見極めたうえで、サンプルの修正案を考えようかな。

ちなみに「ハブアプリ」ってあるけど、デバッグ実行ができません。XAML の記述が間違っているっぽい。

image

なので、状態としてはベータ版というよりも、アルファ版っぽい動きな感じ。

カテゴリー: windows 8 パーマリンク