Xamarin形式:双向绑定和StringFormat问题

我有一个Entry,其中Text属性绑定到我的视图模型中的double。此绑定为TwoWay,并具有StringFormat代表小数点后两位。

代码如下:

<Entry Keyboard="Numeric" Text="{Binding ViewModel.Weight,Mode=TwoWay,StringFormat='{0:F2}'}" />

看起来完全没有问题,但是有一个问题:

当我开始在此Entry中键入内容时,光标将移至末尾,因此必须将其移回要键入的位置。

这真是令人讨厌的行为。如果我移除StringFormat,一切将变得完美!

想法?

Xamarin形式:双向绑定和StringFormat问题

yjyyjywww 回答:Xamarin形式:双向绑定和StringFormat问题

真的是令人讨厌的行为...嘿,行为如何!

我试图按照好的指导来解决您的问题,好老@AdamPedley在离开Xamarin之前就离开了我们...

https://xamarinhelp.com/masked-entry-in-xamarin-forms/

尽管如此,我意识到即使是很好的举止,也会表现出令人讨厌的行为。

我看到的唯一可行的方法是在用户离开条目后(触发Unfocused事件时应用格式)

为此,您必须订阅Unfocused事件:

<Entry x:Name="entry" 
       Keyboard="Numeric" 
       Text="{Binding Weight,Mode=TwoWay}"
       Unfocused="entry_Unfocused"/>

然后在后面的代码中

private void entry_Unfocused(object sender,FocusEventArgs e)
{
    if (double.TryParse(entry.Text,out double result))
    {
        entry.Text = String.Format("{0:F2}",Math.Floor(result * 100) / 100);
    }
} 

注意:默认情况下,String.Format会舍入结果。在这里,我使用了a SO thread中给出的解决方案来避免这种讨厌的行为,并将小数位数减少到第二位...但是您可以按照自己的意愿做! (我发现自动执行舍入会导致我在another SO thread中描述的问题!)

本文链接:https://www.f2er.com/3108128.html

大家都在问