アジョブジ星通信

進捗が出た頃に更新されるブログ。

Nemerle で WPF 開発してみた

f:id:azyobuzin:20131125192821p:plain

.NET 言語ときたらとりあえず WPF できるかを試す azyobuzin です。昨日 @lambdalice 氏に Nemerle なる言語を布教され、とりあえず WPF をいじってみました(おい

言語としては面白いのですが、まだ開発環境がだるいです。

そもそも

Windows Forms しか開発環境はなくて、 NemerleWPF をいじるには Application クラスの作成からなにから自分でやらなきゃいけないし、 XAML はあとから読み込む形なのでイベント駆動にはできません。

何はともあれ 1 からつくる

Windows Application でプロジェクトつくって、 XAML 書いてリソースに設定してあとは呼び出すだけ。以上!

Livet を使う

WPF と言ったら Livet がないとやっていけないので Livet を使っていきます。 Nemerle にはマクロ機能があるので、 C#コードスニペット使ってなんとか書いてたプロパティやコマンドの定義を簡単に書けるようにできたりします。で、それをやった結果がこれ
GitHub - azyobuzin/Livet.Nemerle: Nemerle Macros for WPF using Livet, a MVVM Library, and WPF Application Samples

[ViewModelCommand]
Hoge() : void
{
  
}

/*
CanHoge() : bool
{
  false;
}
*/

で HogeCommand が生成されたり、

[NotifyProperty(["HogeCommand"])]
public Homu : string { get; set; }

で、変更時に RaisePropertyChanged を叩いて、さらに HogeCommand.RaiseCanExecuteChanged まで叩いてくれる Homu プロパティができます。いやー楽しい。

というわけで

Livet とマクロでそこそこ快適な WPF ができるんじゃないでしょうか。どうでしょうね。

あと、 XAML パース部分で読み込まれてないライブラリ(Blend SDK とか)があるとパース失敗するので、最初に読み込ませておく必要があります。その辺を網羅した ApplicationEntryPoint マクロをつくったのですが、ディレクトリ構造がふつうじゃないと死ぬのでオレオレです。

ところで

マクロでエラー起こしても VS のエラー一覧に出てこないので MSBuild 叩いてログ見なきゃいけないとかつらい。