达到条目最大长度时的 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 模式。

这里有两个解决方法

  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");
            }
        }