初心者が迷ったReactivePropertyを使用した数値型のModel
前回は、TextBoxの文字列を数値型に変換するときにdecimalで一旦受けると良いという話をした。
- 変換とチェックの拡張メソッドを作っておくのが無難
- 入力するデータはdecimalで一旦受けることを検討
- 整数は小数点以下の桁数が0のdecimalである
- 一番有効桁数が多く丸め処理が細かく出来るdecimalで検証後に必要な精度に丸めてキャストする
- いろんな型の拡張メソッドを作るより分かりやすい
- 実装方法が統一できるので使いまわしができる
- 有効桁数や型変更などの仕様変更に強い
- 天文学的数値を扱うときのみdoubleを使用するが、そもそも指数表記で入力するケースはあまりない
一見するとオーバースペックだが、もしあなたがWPF初心者で以下の要件を抱えているなら、それほどオーバースペックとは言えない。
- 取りあえずコントロールを最初に表示しなければならない
- 上下限値、小数点以下の桁数などのメタデータはデータソースのデータに依存して変わる
- 計算プロパティがあり、それが依存しているプロパティ、計算プロパティ、共に上下限値の制約がある
どういうことかと言うと、
「データ検証のメタデータはハードコーディング出来ない」
という制約が課せられている要件を扱っているケース。
いろいろ探したが、ReactivePropertyの事例はおろか、通常の事例でも中々手本となるサンプルが見つからない。
じゃあ、作るしかないが、数値型のデータとメタデータは、
「ReactivePropertyで実装するのが無難」
と考えた。
取りあえず見やすいようにModelに含める。
以下のパターンで考えてみる。
プロパティ
(2016/04/06)gist-itに対応
Zは、こちらの記事のパターンと同じで、Z = X + Yとする。
(2016/04/06)gist-itに対応
WPF+MVVM+ReactivePropertyとほぼ同時にLINQも始めたので、デバッグ用のコードを入れてます。
VS2015は、LINQのデバッグ機能が強化されたらしいけど、まだVS2013なので、ブレーク入れられるところは改行入れてます・・・
メタデータのプロパティ
(2016/04/06)gist-itに対応
(2016/04/06)gist-itに対応
長くなったので、一旦切ります・・・
(2016/04/06)gist-itに対応