【发布时间】:2015-01-02 16:28:37
【问题描述】:
考虑以下几点:
C#:
public class MyVM {
public double DValue { get; set; }
}
XAML:
<TextBox Text={Binding DValue, UpdateSourceTrigger=PropertyChanged} />
用户在框中键入“asdf”。这无法转换为double,因此您会在文本框上看到错误模板——它的周围有一个红色边框。
在 keydown 上验证的数字文本输入的典型问题是,如果用户键入“-”,则这不是有效的数字值。如果用户将值填写为“-1”,那很好,但文本框已经适应了。
一种解决方法是给 ViewModel 一个 StringDValue 属性,它将“-”和“”视为 0,保持 DValue 属性正确更新,等等。你可以做到这一点。值转换器是有问题的,因为事情是双向的:用户键入“-”,0 回到 ViewModel 属性,OnPropertyChanged 被触发,0 返回,你在文本框中得到一个零。我想这也是可行的,但这不是我在这里选择的路径。
那么问题来了:
问题是当用户键入“asdf”时会发生什么。 StringDValue 如何告诉Binding 该值是无效输入?是否有一些异常可以引发绑定将捕获并视为非崩溃输入错误?我抛出的每个异常类型都没有在绑定中捕获。
【问题讨论】: