最近在写发送手机号,获取验证码的时候需要禁用掉避免重复发送
但是Maui的案例比较少只能自己琢磨
首先是ClockPage.xaml 代码
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:XamlSamples;assembly=XamlSamples"
x:Class="XamlSamples.ClockPage"
Title="Clock Page">
<VerticalStackLayout
Spacing="25"
Padding="30,0"
VerticalOptions="Center">
<Button Text="{Binding DateTime}"
BackgroundColor="#c9cdd4"
CornerRadius="15"
Clicked="Obtain"
IsEnabled="{Binding eee}"
x:Name="Verification"
/>
</VerticalStackLayout>
</ContentPage>
ClockPage.xaml.cs
public partial class ClockPage : ContentPage
{
public ClockPage()
{
InitializeComponent();
BindingContext = new
{
DateTime = "获取验证码",
eee=true,
};
}
public void Obtain(object sender, EventArgs e)
{
BindingContext = new ClockViewModel();
}
}
}
ClockViewModel.cs
public class ClockViewModel : INotifyPropertyChanged
{
string _dateTime;
Timer _timer;
public event PropertyChangedEventHandler PropertyChanged;
public string DateTime
{
get => _dateTime;
set
{
if (_dateTime != value)
{
_dateTime = value;
OnPropertyChanged();
}
}
}
bool _eee;
public bool eee {
get => _eee;
set
{
if (_eee != value)
{
_eee = value;
OnPropertyChanged();
}
}
}
int scss = 6;
public ClockViewModel()
{
this.DateTime = scss + "秒";
this.eee = false;
_timer = new Timer(new TimerCallback((s) => this.DateTime = timer1_Tick()), null, TimeSpan.Zero, TimeSpan.FromSeconds(1));
}
public string timer1_Tick()
{
scss--;
if (scss == 0)
{ scss =0;
_timer.Dispose();//使用Dispose()方法可停止(销毁)定时器,使回调不再被执行
this.DateTime = "获取验证码";
this.eee = true;
return this.DateTime;
}
this.DateTime =scss.ToString() + "秒";
return this.DateTime;
}
~ClockViewModel() => _timer.Dispose();
public void OnPropertyChanged([CallerMemberName] string name = "") => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
}