double
型を通貨として表示するために ValueConverter を使用しています。エントリが有効であることを確認したいので、私が作成したこの検証方法を使用してみました。私の唯一の問題は、値全体 (つまり $500.00) を選択して何も入力できないことです。「$」が選択されていない場合、すべて問題ないようです。どうすればこれを修正できますか?
XAML:
<TextBox Text="{Binding Converter={StaticResource MoneyConverter}, Path=fr}"
PreviewTextInput="ValidateMoney" DataObject.Pasting="TextBox_Pasting"/>
コードビハインド:
private void ValidateMoney(object sender, TextCompositionEventArgs e) {
Regex rgx = new Regex(@"^(\$)[0-9]*[.]{0,1}[0-9]*$|^[.][0-9]+$|^[0-9]*[.]{0,1}[0-9]*$");
e.Handled = !rgx.IsMatch((sender as TextBox).Text.Insert((sender as TextBox).SelectionStart, e.Text));
}
public class MoneyConverter : IValueConverter {
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
if (value != null) {
double d;
string temp = value.ToString();
if (double.TryParse(temp, out d)) {
return String.Format("{0:C}", d);
} else {
return value;
}
} else {
return value;
}
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) {
if (value != null) {
double d;
string temp = value.ToString();
if (double.TryParse(temp, out d)) {
return String.Format("{0:C}", d);
} else {
return value;
}
} else {
return value;
}
}
}