モノトーンの伝説日記

Apex Legends, Splatoon, Programming, and so on...

C++/CX のための MVVM infrastructure「Xamcc」に関して

 ようやくお披露目できる最低限度が整ったので、ブログを書く。

概要

  1. なぜ作ったのか
  2. 簡単な使い方
  3. 今後の方針

1. なぜ作ったのか

 理由は簡単、C++/CX で MVVM をするとき楽になるために作った。地味に Vector の変換などがめんどくさいので、そのあたりを最低限サポートするものとして作っていく感じ。

2. 簡単な使い方

2.1. 依存プロパティー定義

 プリプロセッサーで実装済み。めんどくさい実装を簡単に定義できます。

IMPL_DP_GETSET( MainPageViewModel, String, ButtonMessage, PropertyMetadata::Create( "Click me" ) )

2.2. コマンド

ButtonCommand = ref new RelayCommand(
 []( Object^ ) { ( ref new MessageDialog( "Clicked!" ) )->ShowAsync(); },
 [this]( Object^ ) { return IsButtonEnabled; } );

2.3. M to VM 変換

ViewModelCollection = ViewModelHelper::CreateDispatcherVector<Windows::Foundation::DateTime, String^>(
  processor_.GetVector(),
  []( Windows::Foundation::DateTime from )
  {
    using namespace Windows::Globalization::DateTimeFormatting;
    return ( ref new DateTimeFormatter( "longtime" ) )->Format( from );
  },
  dispatcher );

3. 今後の方針

 今後の方針として、

  • DispatcherVectorView (.NET でいう ReadonlyDispatcherCollection 的な感じ) として専用実装 (現状 Vector を使っており、編集可能な状態)。
  • NuGet パッケージ化 (簡単に、使いやすく)

を予定している。なお、NavigationHelper は保存機能は持ち合わせてないただの、Navigation 補助のためのものになっている。これは、各アプリごとでライフサイクル管理が違っていることを想定し、そのあたりはこの infrastructure ではサポートしない or 別クラスに実装する方針に決まった (はたして NavigationHelper を infrastructure に加えるべきか否かは難しいが、このあたりは今後検討していけばよいだろう)。

 もう一つの xaml pack についてもそのうち更新したい。

 今のところはこんな感じ。MVVM の大先輩のアドバイスがあるとさらにいい感じで進化できるのかも。。。

 

GitHub リンクです。