我花了两天时间,但最后我明白了我的应用程序的问题,但我不确定我是否犯了错误或什么......
我有这个 XAML 文件、一个简单的搜索栏和一个执行相同命令的按钮:
<VerticalStackLayout>
<SearchBar SearchCommand ="{Binding RicercaAnagraficaCommand}">
</SearchBar>
<Button Command="{Binding RicercaAnagraficaCommand}"/>
</VerticalStackLayout>
视图模型中的命令是这样的:
[RelayCommand]
async void RicercaAnagrafica ()
{
await App.Current.MainPage.ShowPopupAsync(new AnagraficaPopUp());
}
当我点击应用程序上的按钮时,它会正常打开弹出窗口。当我按下搜索栏上的 Enter 键时,应用程序会打开两个弹出窗口(一个在另一个之上)。
我是不是犯了什么错误?
在 XAML 中,将 SearchButtonPressed 事件添加到 SearchBar:
<VerticalStackLayout>
<SearchBar SearchCommand="{Binding RicercaAnagraficaCommand}"
SearchButtonPressed="OnSearchButtonPressed">
</SearchBar>
<Button Command="{Binding RicercaAnagraficaCommand}"/>
</VerticalStackLayout>
在 ViewModel 中,处理 SearchButtonPressed 事件并防止默认行为:
private async void OnSearchButtonPressed(object sender, EventArgs e)
{
// Prevent the default behavior of the SearchBar
((SearchBar)sender).IsEnabled = false;
((SearchBar)sender).IsEnabled = true;
// Execute your command here
await RicercaAnagrafica();
}
看起来,当您用 void 而不是任务触发此事件时,您会得到两个事件。所以尝试使用任务
[RelayCommand]
async Task RicercaAnagrafica()
{
await App.Current.MainPage.ShowPopupAsync(new AnagraficaPopUp());
}