假设我有一个数据类型为float
的ViewModel,并实现了INotifyPropertyChanged
接口。
private float Amount;
然后在我的界面中:
<TextBox Text="{x:Bind Amount, Mode=TwoWay}" />
当我尝试键入字符.
(句点)时,文本光标会返回到开头,并在两次按下句点后立即显示。可能导致这种行为的原因是什么?
答案 0 :(得分:1)
我在评论中提到的UpdateSourceTrigger=PropertyChanged
时测试了代码。问题是PropertyChanged
导致绑定在每次击键后立即更新。因此,当输入不包含有效的float
时,行为是非常可预测的。到目前为止,我看到过三种不同的行为。一旦输入一个数字并且在此之后的时间段,绑定有时会将其转换为小数:
但有时候这种情况并没有发生,控件只是让我输入3.
而没有任何改变。这种行为似乎是随机的。关键是设置为backing属性的value
然后通过PropertyChanged
事件和数据绑定反映在UI中,这会导致文本更改并且光标跳转。
简单地说,这里的问题是,当输入接受任何float
时,属性是string
。您的问题的解决方案可能是使用string
属性进行绑定,例如AmountText
,然后在setter中验证文本实际上是有效的float
,解析它并手动设置Amount
属性。这样,只要输入有效输入,您就会保留值的“立即”更新,同时还可以避免您看到的奇怪行为。
另请查看WinRTXamlToolkit及其NumericUpDown
control,这可能是您的目标的更好解决方案,因为它为用户提供了输入数值的自然方式。