私たちのプロジェクトには、double にバインドされた WPF テキストボックスがあります。たとえば、convertback で両方の "." を使用できるようにするコンバーターがあります。および "," を小数点として変換し、convert メソッドで double を n2 数値形式にフォーマットします。ここでは、コンバーターの単純化されたバージョンを確認できます。
public class DoubleConverter:IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value == null || value.GetType() != typeof(double))
return null;
else
return ((double)value).ToString("n2");
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value == null)
return null
else
return Double.Parse(((string)value).Replace('.',','));
}
}
テキストボックスは次のようになります。
<TextBox Text="{Binding Path=Factor, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}" Width="500" Height="50" />
また、double プロパティは propertychanged イベントを発生させます。
public double Factor
{
get { return _factor; }
set
{
_factor = value;
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs("Factor"));
}
}
以前のバージョンの WPF では、テキストを入力するときに変換が呼び出されなかったため、これは正常に機能していました。この動作は明らかに変更され、すべてのテキスト エントリで convert メソッドが呼び出されるようになり、何かを入力すると double がフォーマットされます。フォーマットを使用しない場合でも、小数点を入力できないという問題があります。
これは UpdateSourceTrigger=Propertychanged を使用しないことで解決できますが、検証にはこれが必要です。IDataErrorInterface を使用して検証を実装します。ValidateWithoutUpdate メソッドがあることは知っていますが、これは IDataErrorInterface を使用した検証では機能しません。
したがって、私が基本的に必要としているのは、OnPropertyChanged が発生する ConvertBack (したがって検証) と、OnLostFocus のみが発生する ConvertBack です。
これは可能ですか?または、私たちの問題に対する別の解決策はありますか?