当条目最大长度达到时,Xamarin显示警报



我有一个条目设置为最大长度为3。当用户尝试输入4个字符时,我想显示一个简单的DisplayAlert消息,如下所示。我正试图用MVVM实现它,但很难与警报所需的等待绑定。如果有帮助的话,我知道最大长度将永远是3。

Xaml:

<Entry Text = "{Binding BoundText}"/>

ViewModel:

string _boundText;
public string BoundText
{
get => _boundText;
set
{
if(value.Length > 3)
{
await DisplayAlert("Alert", "You have been alerted", "OK");
}
else
{
...
}
}
}

我得到的错误是等待操作符需要在async方法中,但是当我添加它时,我得到一个错误,即修饰符async对构造函数无效。对如何实现这一点有什么想法吗?

我们不能把async方法放到Setter方法中。

并且不建议将DisplayAlert放入viewmodel中,因为该方法属于页面,它破坏了mvvm模式。

这里有两个变通方法.

  1. 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");
    });
    }
    
  2. 在条目的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");
    }
    }
    

相关内容

  • 没有找到相关文章

最新更新