达到条目最大长度时的 Xamarin DisplayAlert
Xamarin DisplayAlert when entry max length reached
我有一个设置为最大长度为 3 的条目。当用户尝试输入 4 个字符时,我想显示一个简单的 DisplayAlert 消息,如图 here 所示。我正在尝试使用 MVVM 来实现它,但是很难绑定警报所需的等待。我知道如果有帮助,最大长度将始终为 3。
Xaml:
<Entry Text = "{Binding BoundText}"/>
视图模型:
string _boundText;
public string BoundText
{
get => _boundText;
set
{
if(value.Length > 3)
{
await DisplayAlert("Alert", "You have been alerted", "OK");
}
else
{
...
}
}
}
我得到的错误是 await 运算符需要在异步方法中,但是当我添加它时,我得到一个错误,指出修饰符 async 对构造函数无效。关于如何实现这个的任何想法?
我们不能将异步方法放入 Setter
方法中。
并且不建议将 DisplayAlert
放入 viewmodel 中,因为该方法属于 page ,它会破坏 mvvm 模式。
这里有两个解决方法。
在Setter
方法中发送MessagingCenter
,并在页面中做一些事情。
//viewmodel
set
{
if (value.Length > 3)
{
MessagingCenter.Send<object>(this, "Hi");
}
...
//page
public Page1()
{
InitializeComponent();
this.BindingContext = model;
MessagingCenter.Subscribe<object>(this, "Hi", async (obj) =>
{
await DisplayAlert("Alert", "You have been alerted", "OK");
});
}
在条目的TextChanged
中处理。
<Entry Text = "{Binding BoundText}" TextChanged="Entry_TextChanged"/>
private async void Entry_TextChanged(object sender, TextChangedEventArgs e)
{
if(e.NewTextValue.Length > 3)
{
await DisplayAlert("Alert", "You have been alerted", "OK");
}
}
我有一个设置为最大长度为 3 的条目。当用户尝试输入 4 个字符时,我想显示一个简单的 DisplayAlert 消息,如图 here 所示。我正在尝试使用 MVVM 来实现它,但是很难绑定警报所需的等待。我知道如果有帮助,最大长度将始终为 3。
Xaml:
<Entry Text = "{Binding BoundText}"/>
视图模型:
string _boundText;
public string BoundText
{
get => _boundText;
set
{
if(value.Length > 3)
{
await DisplayAlert("Alert", "You have been alerted", "OK");
}
else
{
...
}
}
}
我得到的错误是 await 运算符需要在异步方法中,但是当我添加它时,我得到一个错误,指出修饰符 async 对构造函数无效。关于如何实现这个的任何想法?
我们不能将异步方法放入 Setter
方法中。
并且不建议将 DisplayAlert
放入 viewmodel 中,因为该方法属于 page ,它会破坏 mvvm 模式。
这里有两个解决方法。
在
Setter
方法中发送MessagingCenter
,并在页面中做一些事情。//viewmodel set { if (value.Length > 3) { MessagingCenter.Send<object>(this, "Hi"); } ... //page public Page1() { InitializeComponent(); this.BindingContext = model; MessagingCenter.Subscribe<object>(this, "Hi", async (obj) => { await DisplayAlert("Alert", "You have been alerted", "OK"); }); }
在条目的
TextChanged
中处理。<Entry Text = "{Binding BoundText}" TextChanged="Entry_TextChanged"/> private async void Entry_TextChanged(object sender, TextChangedEventArgs e) { if(e.NewTextValue.Length > 3) { await DisplayAlert("Alert", "You have been alerted", "OK"); } }