2015-11-01 76 views
1

我绑定TextBox.Text到int属性整数属性:WPF绑定的TextBox没有抛出异常

<TextBox Text="{Binding Lines, UpdateSourceTrigger=PropertyChanged}" /> 

private int _lines = 10; 
public int Lines 
{ 
    get { return _lines; } 
    set { _lines = value; } 
} 

一切如预期这个简单的代码工作,有一个文本框,甚至验证。然而,在输出日志中抛出异常System.FormatException。我的问题是:
有没有优雅的方式摆脱例外,而几乎没有重新实现一切我自己?
通过我所说的一切,我的意思是验证者,转换器等简单吨代码不做任何事情,只是拨打Int32.TryParse而不是Int32.Parse。不是wpf抛出和处理的异常将是一个大问题,但完整的日志使得发现实际问题变得更加困难。

+1

你可以防止用户输入无效值 – Domysee

+0

@Domysee你的意思是像处理textChanged和回滚字段,如果它不能被解析?我想这可以工作 - 不完全一样的行为,但它可以。 – wondra

+0

确切地说,我会处理PreviewKeyDown事件,并取消它的无效键,但原则上它是相同的 – Domysee

回答

1

问题并不清楚,但我认为您指的是如果用户输入无效文本(即非数字,非整数数据)时发生的异常。

AFAIK,WPF不包含限制用户输入的内置控件。所以你的选择是:

+0

嗯..我的问题的重点是 - 如果有默认转换包括整数验证为什么它会抛出异常。如果没有很多努力,这个例外有一个解决方法 - 答案是没有也是有效的答案(现在我可以忍受它,但它让我困惑不已) – wondra

+0

@wondra:_“如果有默认转换,包括验证“_ - 是否存在?这取决于你的意思是“验证”;对我来说,这意味着用户反馈和禁用相关控件(例如“OK”按钮)。你什么意思?为什么应该定义排除抛出异常的可能性,因为捕获并处理抛出的异常是实现验证的有效技术? –

+0

@wondra:_“如果没有很多努力就有这种异常的解决方法”_ - 再次,是吗?这取决于“解决方法”和“很多努力”的含义。例如,我个人认为在我的答案中提到的“System.Windows.Forms.MaskedTextBox”变通办法是“非常努力”。如果没有_precisely_定义您的条款和条件,就不可能知道哪些答案会解决这些条款和条件。 –