2017-08-09 60 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(); 
}