2017-08-09 71 views
-2

我已经创建的列表并绑定,为我的布局,它工作正常,现在我想在MvxListView来实现搜索功能Xamarin的Android -Code -Models如何添加搜索功能MvxListView -

public class Language 
{ 
    public string Lang { get; set; } 
} 

在语言服务类

public async Task GetAllLanguageList(Action<ObservableCollection<Language>> successAction, Action<Exception> errorAction) 
    { 
     ObservableCollection<Language> AllLanguageList = new ObservableCollection<Language>(); 
     AllLanguageList.Add(new Language { Lang = "Spanish"}); 
     AllLanguageList.Add(new Language { Lang = "Portuguese"}); 
     AllLanguageList.Add(new Language { Lang = "Manadarin"}); 
     AllLanguageList.Add(new Language { Lang = "English"}); 

     await System.Threading.Tasks.Task.Delay(TimeSpan.FromSeconds(0)); 
     successAction(AllLanguageList); 
    } 

在我的视图模型我已经做了所有这些想了想结合

public ObservableCollection<Language> AllLanguageList { get; private set; } 
AllLanguageList = new ObservableCollection<Language>(); 

所有代码工作正常 现在我想要实现搜索

在我的客户端

edit_text_search = FindViewById<EditText>(Resource.Id.edit_text_search); 
edit_text_search.TextChanged += InputSearch_TextChanged; 

private void InputSearch_TextChanged(object sender, Android.Text.TextChangedEventArgs e) 
{ 
    //What should I write here? 
} 

XAML代码

<Mvx.MvxListView 
    android:id="@+id/ListView2" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="#ffffff" 
    android:divider="@null" 
    android:dividerHeight="0dp" 
    local:MvxBind="ItemsSource LanguageList" 
    local:MvxItemTemplate="@layout/mainlist_template_all" /> 
+0

只是过滤你绑定到ListView的ItemsSource。 – Cheesebaron

+0

Hi @ Cheesebaron,谢谢你的回复。 你能告诉我如何从Xaml做到这一点? –

回答

0

一个非常简单的解决办法是:

  1. 而不是绑定到AllLanguageList bin d到一个新的FilteredLanguageList
  2. 每当有人进入东西在搜索框或文本字段过滤AllLanguageList和覆盖的FilteredLanguageList

内容,这样很幼稚,原始地:

private List<string> _filteredLanguageList; 
public List<string> FilteredLanguageList 
{ 
    get => _filteredLanguageList; 
    set 
    { 
     _filteredLanguageList = value; 
     NotifyPropertyChanged(); 
    } 
} 

private string _searchQuery; 
public string SearchQuery 
{ 
    get => _searchQuery; 
    set 
    { 
     _searchQuery = value; 
     FilterLanguages(_searchQuery); 
    } 
} 

在XAML中绑定你ListViewItemsSourceFilteredLanguageList,并将您的EntryText属性绑定到SearchQuery

然后在FilterLanguages中实施您的语言过滤。这样的东西可以工作,但你需要根据自己的喜好进行调整:

private void FilterLanguages(string query) 
{ 
    FilteredLanguageList = AllLanguageList.Where(l => 
     l.Lang.ToLowerInvariant() 
      .Contains(
       query.ToLowerInvariant()).ToList(); 
}