当输入字段值发生更改时,如何触发支持代码中的方法?



我有一个应用程序,其中使用Xamarin输入字段来允许输入数字。这是我编码的内容:

<Entry 
Keyboard="Numeric" 
x:Name="dBtnPts"
VerticalOptions="Center" HorizontalOptions="End" HorizontalTextAlignment="End"
TextColor="Gray" Completed="dBtnPtsChanged"
WidthRequest="55"/>

void dBtnPtsChanged(object sender, EventArgs e)
{
App.DB.UpdateStringSetting(Settings.ABtnPoints, ((Entry)sender).Text);
}

当我在 dBtnPtsChanged 方法中放置一个断点时,它永远不会被调用。

有人可以指出我可能出错的地方吗?

您可以扩展Entry以仅在文本更新完成后调用事件;例如:

public class CustomEntry : Entry
{
public event EventHandler TextUpdated;
private bool _isDirty = false;
public CustomEntry()
{
Completed += CustomEntry_Completed;
Unfocused += CustomEntry_Unfocused;
TextChanged += CustomEntry_TextChanged;
}
private void CustomEntry_TextChanged(object sender, TextChangedEventArgs e)
{
_isDirty = true;
}
private void CustomEntry_Unfocused(object sender, FocusEventArgs e)
{
if (_isDirty)
{
_isDirty = false;
TextUpdated?.Invoke(this, EventArgs.Empty);
}
}
private void CustomEntry_Completed(object sender, EventArgs e)
{
if (_isDirty)
{
_isDirty = false;
TextUpdated?.Invoke(this, EventArgs.Empty);
}
}
}

示例用法如下所示:

<local:CustomEntry 
Keyboard="Numeric" 
x:Name="dBtnPts"
VerticalOptions="Center" HorizontalOptions="End" 
HorizontalTextAlignment="End"
TextColor="Gray" TextUpdated="dBtnPtsChanged"
WidthRequest="55"/>

单击"完成"按钮时会出现completed

当我们单击键盘上的Enter时,它可以在PC上的sumilator上触发,但是,当在真实设备上运行时,在Xamarin.forms的键盘中没有">完成">"返回"之类的按钮。

因此,作为临时解决方案,我们可以将tap事件添加到条目的父布局中。

XMAL中的代码:

<StackLayout >
<StackLayout.GestureRecognizers>
<TapGestureRecognizer Tapped = "Handle_Tapped" />
</StackLayout.GestureRecognizers>
<Entry Keyboard="Numeric" 
x:Name="dBtnPts"
VerticalOptions="Center" 
HorizontalOptions="End"
HorizontalTextAlignment="End"
TextColor="Gray" 
Completed = "Handle_Completed"
WidthRequest="55"/>
</StackLayout>

代码隐藏:

void Handle_Tapped(object sender, System.EventArgs e)
{
App.DB.UpdateStringSetting(Settings.ABtnPoints, ((Entry)dBtnPts).Text);
}

更新:

正如SharadaGururaj所建议的那样,一种更好和简单的方法是分配Entry的事件Unfocused,并在其内部操作数据库。当然,我们可以采用沙拉达古鲁拉杰的答案中的解决方案,它更具可控性和灵活性。

仅在用户按下返回按钮时调用completed事件。例如,iOS 软键盘上的蓝色"完成"按钮。

您可能想查看TextChanged事件。

相关内容

  • 没有找到相关文章