C# Xamarin表单,快速按下按钮将打开2倍于相同窗口的窗口
当我单击重定向到新窗口的图标时,它会打开相同的视图两次。我不知道如何处理它,只打开一个视图 示例xaml按钮C# Xamarin表单,快速按下按钮将打开2倍于相同窗口的窗口,c#,xamarin.forms,C#,Xamarin.forms,当我单击重定向到新窗口的图标时,它会打开相同的视图两次。我不知道如何处理它,只打开一个视图 示例xaml按钮 <local:AnimatedImage Grid.Column="2" Source="googlemap_view_search.png" HorizontalOptions="Center" VerticalOptions="Center" Margin="16,0"> <Image.Gest
<local:AnimatedImage Grid.Column="2" Source="googlemap_view_search.png"
HorizontalOptions="Center" VerticalOptions="Center" Margin="16,0">
<Image.GestureRecognizers>
<TapGestureRecognizer Command="{Binding SearchCommand}" />
</Image.GestureRecognizers>
</local:AnimatedImage>
问题是,当您在执行搜索命令之前等待动画时,没有任何东西阻止用户再次启动该命令。您可以添加一个布尔变量,该变量在输入命令时设置为
true
,如果命令已在执行,则忽略第二次用户点击
private ICommand TransitionCommand
{
get
{
bool isExecuting = false;
return new Command(async () =>
{
if(isExecuting) return;
isExecuting = true
try
{
this.AnchorX = 0.48;
this.AnchorY = 0.48;
await this.ScaleTo(MAGNIFICATION_VALUE, 50, Easing.Linear);
await Task.Delay(ANIMATED_TIME);
await this.ScaleTo(INITIAL_VALUE, 50, Easing.Linear);
if (Command != null)
{
Command.Execute(CommandParameter);
}
}
finally
{
isExecuting = false;
}
});
}
}
Xamarin
Command
有一个方法,可以根据您的业务逻辑来阻止命令的执行
public ICommand SearchCommand {get; private set; }
bool _canSearch = true;
public bool CanSearch
{
get { return _canSearch; }
private set {
_canSearch = value;
((Command)SearchCommand).ChangeCanExecute();
}
}
public SearchPageViewModel()
{
SearchCommand = new Command(() => DoSearchStuff(), () => CanSearch)
}
void DoSearchStuff()
{
CanSearch = false;
// long searching stuff
CanSearch = true;
}
希望这对每次调用getter时返回
新命令有所帮助?
private ICommand TransitionCommand
{
get
{
bool isExecuting = false;
return new Command(async () =>
{
if(isExecuting) return;
isExecuting = true
try
{
this.AnchorX = 0.48;
this.AnchorY = 0.48;
await this.ScaleTo(MAGNIFICATION_VALUE, 50, Easing.Linear);
await Task.Delay(ANIMATED_TIME);
await this.ScaleTo(INITIAL_VALUE, 50, Easing.Linear);
if (Command != null)
{
Command.Execute(CommandParameter);
}
}
finally
{
isExecuting = false;
}
});
}
}
public ICommand SearchCommand {get; private set; }
bool _canSearch = true;
public bool CanSearch
{
get { return _canSearch; }
private set {
_canSearch = value;
((Command)SearchCommand).ChangeCanExecute();
}
}
public SearchPageViewModel()
{
SearchCommand = new Command(() => DoSearchStuff(), () => CanSearch)
}
void DoSearchStuff()
{
CanSearch = false;
// long searching stuff
CanSearch = true;
}