毛伊岛搜索栏和弹出窗口

问题描述 投票:0回答:2

我花了两天时间,但最后我明白了我的应用程序的问题,但我不确定我是否犯了错误或什么......

我有这个 XAML 文件、一个简单的搜索栏和一个执行相同命令的按钮:

<VerticalStackLayout>
<SearchBar SearchCommand ="{Binding RicercaAnagraficaCommand}">
            </SearchBar>
            <Button Command="{Binding RicercaAnagraficaCommand}"/>
</VerticalStackLayout>

视图模型中的命令是这样的:

[RelayCommand]
        async void RicercaAnagrafica ()
        {
await App.Current.MainPage.ShowPopupAsync(new AnagraficaPopUp());
 }

当我点击应用程序上的按钮时,它会正常打开弹出窗口。当我按下搜索栏上的 Enter 键时,应用程序会打开两个弹出窗口(一个在另一个之上)。

我是不是犯了什么错误?

popup searchbar maui-community-toolkit
2个回答
0
投票

在 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();
}

0
投票

看起来,当您用 void 而不是任务触发此事件时,您会得到两个事件。所以尝试使用任务

[RelayCommand]
async Task RicercaAnagrafica()
{
    await App.Current.MainPage.ShowPopupAsync(new AnagraficaPopUp());
}
© www.soinside.com 2019 - 2024. All rights reserved.