【问题标题】:How To Adding Search Functionality to MvxListView - Xamarin Android如何向 MvxListView 添加搜索功能 - Xamarin Android
【发布时间】:2017-08-09 10:17:53
【问题描述】:

我已经创建了列表并将其绑定到我的布局现在可以正常工作我想在 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" />

【问题讨论】:

  • 只需过滤您绑定到 ListView 的 ItemsSource。
  • 嗨@Cheesebaron,感谢您的重播。你能告诉我如何从 Xaml 中做到这一点吗?

标签: android search xamarin mvxlistview


【解决方案1】:

一个非常简单的解决方案是:

  1. 不是绑定到AllLanguageList 而是绑定到一个新的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 中,将您的 ListView ItemsSource 绑定到 FilteredLanguageList,并将您的 Entry Text 属性绑定到 SearchQuery

然后在FilterLanguages 中实现您的语言过滤。像这样的东西可能会起作用,但您需要根据自己的喜好进行调整:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-16
    • 1970-01-01
    • 2015-09-12
    • 1970-01-01
    • 2016-10-31
    • 2012-04-25
    相关资源
    最近更新 更多