我使用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();
}
答案 0 :(得分:2)
绑定到int属性有它的缺点。如果在文本框中设置了无法转换为int的值,则绑定将无效 - 即使不调用转换器,也不会调用您的setter。
最简单的方法是在viewmodel中使用字符串属性,并将值转换为模型中的int属性。要进行验证,您可以使用IDataErrorInfo。
像Dan建议你可以将UpdateSourceTrigger设置为LostFocus。但是当你清除文本框时这没有用;)