前提・実現したいこと
WPFアプリの開発を行っています。
1つのテキストボックスにStringFormatで数値の書式設定をしたい。
入力される数値は整数(小数点以下の桁なし)または実数(小数点以下2桁または3桁)
できれば日付の形式(yyyy/MM/dd)も入力できるようにしたい。
試したこと
入力される数値の桁数が固定であればStringFormatに下記のように指定して設定できたのですが、
今回の場合、入力された数値の桁数を判別して桁区切りと小数点以下の表示を切り替えたいです。
コード側で条件分岐してバインディングしようとしている値を先に加工した方が良いのでしょうか。
回答よろしくお願いします。
サンプルコード(実際は1つのテキストボックスで書式のみを切り替えたい)
XAML
1<!-- 整数の場合桁区切りのみ --> 2<TextBox Text="{Binding hoge, StringFormat={}{0:N0}}"> 3<!-- 実数の場合桁区切りと小数点以下の桁数を指定のみ --> 4<TextBox Text="{Binding fuga, StringFormat={}{0:N2}}"> 5<!-- 日付の場合日付の書式を指定 --> 6<TextBox Text="{Binding piyo, StringFormat={}{0:yyyy/MM/dd}}">
開発環境
VisualStudio 2017
.NET Framework 4.6.1
バインドしたいデータの型は何なんでしょうか?
ここに書いてあることからだけ判断すれば、DateTime とも double とも互換性のある独自クラスを作るように読めますが、実際そのクラスはできているんでしょうか?
バインドしたいデータの型はstringです。
下記の様な入力を想定して書式指定したいと考えています。
日付は難しいようであれば整数と実数だけでも対応できるようにしたいです。
よろしくお願いします。
整数入力:15000→15,000 書式指定N0
実数(小数点以下2桁)入力:1234.56→1,234.56 書式指定N2
実数(小数点以下3桁)入力:1234.567→1,234.567 書式指定N3
日付入力:2019/5/1→2019/05/01 書式指定yyyy/MM/dd
回答しました。
小数点以下第二位と第三位を別にする意味がわからなかったのでまとめていますが、それ以外はここに書かれた通りに動いているはずです。思いと違うところがあるなら言わなければわかりません。
DateTime とも double とも互換性のある独自クラスではなく、文字列ということなので、文字列としての処理しかしていません。数値としての処理が必要なら、この文字列を数値に直すためのコードが追加で必要になるでしょうが、それはまた別の問題のはずです。
回答ありがとうございます。
小数点以下第二位と第三位を別にするのは客先毎の仕様で2桁で表示する帳票と3桁まで表示する帳票があり、どちらの帳票を出力するかで桁数を切り替えるためでした。
回答していただいたプログラムを参考に2桁と3桁を分ける処理を追加して動作確認できました。
ありがとうございました。
回答2件
あなたの回答
tips
プレビュー