TextBox绑定:仅从源更新一次

时间:2013-06-19 13:05:57

标签: wpf data-binding

我使用UpdateSourceTrigger.PropertyChanged将TextBox绑定到一个整数。

这似乎工作得很好,除非我想改变让我们说1000到2000。 删除1后,绑定有点过于聪明,并将文本截断为一个0。

我现在的解决方法是在进行一些过滤后显式调用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();                    
    }

1 个答案:

答案 0 :(得分:2)

绑定到int属性有它的缺点。如果在文本框中设置了无法转换为int的值,则绑定将无效 - 即使不调用转换器,也不会调用您的setter。

最简单的方法是在viewmodel中使用字符串属性,并将值转换为模型中的int属性。要进行验证,您可以使用IDataErrorInfo。

像Dan建议你可以将UpdateSourceTrigger设置为LostFocus。但是当你清除文本框时这没有用;)