0

私たちのプロジェクトには、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 です。
これは可能ですか?または、私たちの問題に対する別の解決策はありますか?

4

1 に答える 1