带有 MVVM 的 Xamarin 搜索栏
Xamarin Searchbar with MVVM
关于如何使用 Xamarin SearchBar
和 MVVM 模式的文章很多。问题是所有这些文章都将 PerformSearch
事件绑定到 MVVM 命令。
我想现在,大多数用户都希望在键入时看到一些结果,而不是在点击“搜索”后看到结果。因此,我尝试使用 Xamarin 社区工具包的 EventToCommandBehavior
将 TextChanged
事件绑定到我的 MVVM 命令。它看起来像这样:
<SearchBar
x:Name="CompanySearch"
Placeholder="Search companies..."
PlaceholderColor="#777777"
BackgroundColor="{StaticResource PrimaryBackground}"
TextColor="{StaticResource SecondaryDark}">
<SearchBar.Behaviors>
<xct:EventToCommandBehavior
EventName="TextChanged"
Command="{Binding SearchTextChanged}"
CommandParameter="{Binding Text, Source={x:Reference CompanySearch}}"/>
</SearchBar.Behaviors>
</SearchBar>
这很好用,直到用户在 iOS 上点击“取消”。然后它使应用程序崩溃并出现以下错误:
Invalid type for parameter. Expected Type System.String, but received
Type Xamarin.Forms.TextChangedEventArgs
那是因为在我的模型视图中处理搜索的方法需要 string
,它看起来像这样:
async Task On_Search_Text_Changed(string keyword)
{
if(!string.IsNullOrEmpty(keyword) && keyword.Length > 3)
{
var data = await _myApi.CompanySearch(keyword);
if (data != null && data.Count > 0)
Suggestions = new ObservableRangeCollection<CompanyModel>(data);
}
}
知道如何使用 EventToCommandBehavior
处理取消事件吗?只要我可以在 TextChanged
而不是 PerformSearch
.
上执行搜索,我也愿意接受另一种方法
只需将其包装在 try/catch
中以捕获异常,或者试试这个
async Task On_Search_Text_Changed(object keyword)
{
if (keyword is string)
{
...
}
}
关于如何使用 Xamarin SearchBar
和 MVVM 模式的文章很多。问题是所有这些文章都将 PerformSearch
事件绑定到 MVVM 命令。
我想现在,大多数用户都希望在键入时看到一些结果,而不是在点击“搜索”后看到结果。因此,我尝试使用 Xamarin 社区工具包的 EventToCommandBehavior
将 TextChanged
事件绑定到我的 MVVM 命令。它看起来像这样:
<SearchBar
x:Name="CompanySearch"
Placeholder="Search companies..."
PlaceholderColor="#777777"
BackgroundColor="{StaticResource PrimaryBackground}"
TextColor="{StaticResource SecondaryDark}">
<SearchBar.Behaviors>
<xct:EventToCommandBehavior
EventName="TextChanged"
Command="{Binding SearchTextChanged}"
CommandParameter="{Binding Text, Source={x:Reference CompanySearch}}"/>
</SearchBar.Behaviors>
</SearchBar>
这很好用,直到用户在 iOS 上点击“取消”。然后它使应用程序崩溃并出现以下错误:
Invalid type for parameter. Expected Type System.String, but received Type Xamarin.Forms.TextChangedEventArgs
那是因为在我的模型视图中处理搜索的方法需要 string
,它看起来像这样:
async Task On_Search_Text_Changed(string keyword)
{
if(!string.IsNullOrEmpty(keyword) && keyword.Length > 3)
{
var data = await _myApi.CompanySearch(keyword);
if (data != null && data.Count > 0)
Suggestions = new ObservableRangeCollection<CompanyModel>(data);
}
}
知道如何使用 EventToCommandBehavior
处理取消事件吗?只要我可以在 TextChanged
而不是 PerformSearch
.
只需将其包装在 try/catch
中以捕获异常,或者试试这个
async Task On_Search_Text_Changed(object keyword)
{
if (keyword is string)
{
...
}
}