読者です 読者をやめる 読者になる 読者になる

tmori3y2のブログ

主にWindowsのプログラムなど

初心者が迷ったReactivePropertyを使用した数値型のModel

C# MVVM ReactiveProperty WPF

tmori3y2.hatenablog.com

前回は、TextBoxの文字列を数値型に変換するときにdecimalで一旦受けると良いという話をした。

  • 変換とチェックの拡張メソッドを作っておくのが無難
  • 入力するデータはdecimalで一旦受けることを検討
    • 整数は小数点以下の桁数が0のdecimalである
    • 一番有効桁数が多く丸め処理が細かく出来るdecimalで検証後に必要な精度に丸めてキャストする
    • いろんな型の拡張メソッドを作るより分かりやすい
    • 実装方法が統一できるので使いまわしができる
    • 有効桁数や型変更などの仕様変更に強い
    • 天文学的数値を扱うときのみdoubleを使用するが、そもそも指数表記で入力するケースはあまりない

一見するとオーバースペックだが、もしあなたがWPF初心者で以下の要件を抱えているなら、それほどオーバースペックとは言えない。

  • 取りあえずコントロールを最初に表示しなければならない
  • 上下限値、小数点以下の桁数などのメタデータはデータソースのデータに依存して変わる
  • 計算プロパティがあり、それが依存しているプロパティ、計算プロパティ、共に上下限値の制約がある

どういうことかと言うと、

「データ検証のメタデータはハードコーディング出来ない」

という制約が課せられている要件を扱っているケース。

いろいろ探したが、ReactivePropertyの事例はおろか、通常の事例でも中々手本となるサンプルが見つからない。

じゃあ、作るしかないが、数値型のデータとメタデータは、

「ReactivePropertyで実装するのが無難」

と考えた。

取りあえず見やすいようにModelに含める。

以下のパターンで考えてみる。

プロパティ

(2016/04/06)gist-itに対応

Zは、こちらの記事のパターンと同じで、Z = X + Yとする。

blog.okazuki.jp

(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に対応