UWP TextBox

时间:2018-05-16 08:18:00

标签: c# uwp uwp-xaml

假设我有一个数据类型为float的ViewModel,并实现了INotifyPropertyChanged接口。

private float Amount;

然后在我的界面中:

<TextBox Text="{x:Bind Amount, Mode=TwoWay}" />

当我尝试键入字符.(句点)时,文本光标会返回到开头,并在两次按下句点后立即显示。可能导致这种行为的原因是什么?

1 个答案:

答案 0 :(得分:1)

我在评论中提到的UpdateSourceTrigger=PropertyChanged时测试了代码。问题是PropertyChanged导致绑定在每次击键后立即更新。因此,当输入不包含有效的float时,行为是非常可预测的。到目前为止,我看到过三种不同的行为。一旦输入一个数字并且在此之后的时间段,绑定有时会将其转换为小数:

Conversion

但有时候这种情况并没有发生,控件只是让我输入3.而没有任何改变。这种行为似乎是随机的。关键是设置为backing属性的value然后通过PropertyChanged事件和数据绑定反映在UI中,这会导致文本更改并且光标跳转。

简单地说,这里的问题是,当输入接受任何float时,属性是string。您的问题的解决方案可能是使用string属性进行绑定,例如AmountText,然后在setter中验证文本实际上是有效的float,解析它并手动设置Amount属性。这样,只要输入有效输入,您就会保留值的“立即”更新,同时还可以避免您看到的奇怪行为。

另请查看WinRTXamlToolkit及其NumericUpDown control,这可能是您的目标的更好解决方案,因为它为用户提供了输入数值的自然方式。