0

UpdateSourceTrigger.PropertyChanged を使用して、TextBox を整数にバインドします。

1000 を 2000 に変更したい場合を除いて、これは非常にうまく機能しているようです。

私の回避策は、少しフィルタリングした後に UpdateSource() を明示的に呼び出すことですが、それは正しくありません。

問題を解決する正しい方法はありますか?

    private void OnTextChanged(object sender, TextChangedEventArgs e)
    {
        if (IsLoaded)
        {
            string text = ((TextBox)sender).Text;
            if (text.Length <= 1 || !text.StartsWith("0"))
            {
                ((TextBox)sender).GetBindingExpression(TextBox.TextProperty).UpdateSource();
            }
        }
    }

    private void OnTestLostFocus(object sender, RoutedEventArgs e)
    {
        ((TextBox)sender).GetBindingExpression(TextBox.TextProperty).UpdateSource();                    
    }
4

1 に答える 1

2

int プロパティへのバインドには欠点があります。intに変換できないテキストボックスに値を設定すると、バインディングは機能しません-セッターは呼び出されず、コンバーターも呼び出されません。

最も簡単な方法は、viewmodel で string プロパティを使用し、その値をモデルの int プロパティに変換することです。検証には、IDataErrorInfo を使用できます。

Dan のように、UpdateSourceTrigger を LostFocus に設定できることを示唆しています。ただし、テキストボックスをクリアすると、これは役に立ちません;)

于 2013-06-19T13:24:15.443 に答える