.NET Framework 3.5 SP1で追加されたものの中で、BindingのStringFromatというプロパティがある。こいつは、結構いいと思われる。何がいいかって、これまでWPFで何かちょっとしたものを作ろうとした時に、コンバータが山のように出来るような傾向になると思う。
これは、日付を2000年03月01日とかって出力したいとかいう用途にもコンバータを使っていたからに他ならない!と思ってる。違ったらフォローよろしく!(誰か
StringFormatプロパティを使うと、そこらへんがさっぱり解決してしまう。StringFormatに書式を指定する文字列をセットすると、出力時にきれいにフォーマットしてくれるらしい。早速実験。
まず、単純にバインドして画面に表示するだけのXAMLを用意する。
<Window x:Class="WpfBindingFormat.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Grid>
<TextBlock Text="{Binding}" />
</Grid>
</Window>
んで、C#のコードのようで現在時刻をDataContextにセットする。
using System;
using System.Windows;
namespace WpfBindingFormat
{
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
DataContext = DateTime.Now;
}
}
}
この段階で実行すると、結果は日本人的にはイケテナイことになる。
これを「2008年08月15日 00時35分04.XXX秒」みたいに出すには、今まではコンバータを作って(汎用的に作っておけば使いまわせるけど)設定するってのが一般的だった。.NET Framework 3.5 SP1で追加されたStringFormatを使ってみよう。XAMLにさくっと追加。
<Window x:Class="WpfBindingFormat.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Grid>
<TextBlock Text="{Binding StringFormat=yyyy年MM月dd日 HH時mm分ss.FFF秒}" />
</Grid>
</Window>
これで実行してみると、期待したとおりの表示になる!
いいぞWPF!惚れ直しそうだ。後はDataGridを待つばかり。今年中には出るんだったかな?