SearchBar
關于如何將 Xamarin與 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 上點擊“取消”。然后它使應用程式崩潰并出現以下錯誤:
引數型別無效。預期型別 System.String,但收到型別 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
。
uj5u.com熱心網友回復:
只需將其包裝在 atry/catch
中即可捕獲例外,或者試試這個
async Task On_Search_Text_Changed(object keyword)
{
if (keyword is string)
{
...
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/470483.html