以前 Xamarin
のコードだけで作ったライフゲームのリメイク版です。
今回は XAML
と Prism.Forms
を使っています
ライブラリ | バージョン |
---|---|
Xamarin.Forms | 2.3.3.180 |
Prism.Core | 6.3.0-pre2 |
Prism.Forms | 6.3.0-pre2 |
Prism.Unity.Forms | 6.3.0-pre2 |
Grid
や Button
のレイアウトの設定は、XAML
でやりました。
コードでやると動かすまでイマイチコンポーネントを配置しているのをイメージしにくかったですけど、
XAML
を使うことで動かすまえでもある程度レイアウトをイメージしやすかったです。
ただ、Grid
上に置くたくさんの Cell
達を XAML
で実現しようとすると力技になって色々大変だったので、
そこだけはコード上で行いました。
Button
や Cell
のイベントハンドラの作成や、ライフゲームの処理の部分を ViewModel
に記述しました。
イベントハンドラは、DelegateCommand
を用いることで、クリックできる/できない状態を制御し、より操作しやすいように変更できました。
Button
は後から Image
に変更しました。
Image
はそのままだとクリックできる時とできない時で見た目が変わらないので、
状態によって表示するファイルを変更することでクリック可能なときが分かるようにしました。
Prism
の BindableBase
にある SetProperty
を使うことで、 ViewModel
側の変更を View
に通知することができました。
どちらにも得手不得手があるので、うまく両方を使うとハッピーになると思います。
基本的に View
は XAML
で作成するけど、繰り返しが必要なものや設定にちょっと処理が必要なものについては、
コードビハインド側で作成・配置を行った方がよいなと思いました。
DelegateCommand
は、型パラメータのあり/なしでちょっとだけ書き方が変わり、型パラメータありの場合は CommandParameter
での値の受け渡しが可能でした。
ただ、値の受け渡し時に指定する型は、Nullable
(Null許容)じゃないといけなくて、
int
を指定したら起動時にエラーになり、int?
に変更すると大丈夫でした。
ページ | 内容 |
---|---|
chomado/Xamalist | Prismの実装(特にDelegateCommand) |
nuits.jp blog | Prism関連のトラブルシューティング |
かずきのBlog@hatena | XAMLの実装 |