[英]Xamarin Forms: Problem with TwoWay Binding and StringFormat
我有一個Entry
,其中Text
屬性在我的視圖 model 中綁定到double
精度。 此綁定是TwoWay
並且有 2 個小數位的StringFormat
。
這是代碼:
<Entry Keyboard="Numeric" Text="{Binding ViewModel.Weight, Mode=TwoWay, StringFormat='{0:F2}'}" />
看起來完全沒有問題,但有一個:
當我開始在此條目中Entry
時,cursor 移動到最后,所以我必須將它移回我想要輸入的 position。
這是一個非常討厭的行為。 如果我刪除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 會舍入結果。 在這里,我使用了 SO 線程中給出的解決方案來避免這種討厭的行為,並將小數位減少到第二位......但你可以做你想做的事! (我發現自動執行舍入會導致我在另一個 SO 線程中描述的問題!)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.