ユーザーがたとえば310312と入力して、datepickerのtextプロパティを31/03/12に自動的に更新できるようにしたいと思います。以下のように、datepickerをビューモデルの「Date」プロパティにバインドしました。
WPF4.0では、バインディングはセットの後に自動的にgetを実行するようになりました(INotifyPropertyChangedは必要ありません)。これは以下のコードで発生していますが、「get」日付フィールド値は正しい「31/03/12」ですが、datepickerテキストプロパティは更新されておらず、310312(NB UpdateSourceTrigger = PropertyChanged)のままです。
textboxプロパティは変更されます(たとえば、表示されていない設定コードが大文字に変換される場合)
これがなぜであるかについて、私は本当にいくつかの指針をいただければ幸いです。
<Grid>
<DatePicker Text="{Binding Path=Date,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
Height="25" HorizontalAlignment="Left" Name="datePicker1"/>
<TextBox Text="{Binding Path=State,Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Height="23" HorizontalAlignment="Left" Name="textBox1" />
</Grid>
private string date;
public string Date
{
get
{
return date;
}
set
{
if (value != null)
{
Regex abbreviatedDateFormat = new Regex(@"\A\d{6}\Z");
if (abbreviatedDateFormat.IsMatch(value))
{
value = value.Insert(2, "/");
value = value.Insert(5, "/");
}
}
date = value;
}
}