Xamarin формы Entry с элементами предложения во всплывающем окне списка при наборе текста в нем - PullRequest
0 голосов
/ 18 января 2019

У меня есть поле ввода.И список элементов, которые я извлекаю из базы данных.

Мне нужно отобразить всплывающее окно со списком при вводе записи с этими элементами из БД и отфильтровать их по строке.

Если пользователь находит имя в списке, он может выбрать его, и оно должно отображаться в поле «Ввод» с последующим пробелом, и пользователь может ввести еще одну строку.(аналогично вводу адресов электронной почты в Gmail).Если пользователь не находит имя в списке, он может ввести определенное имя, и после нажатия пробела он сможет ввести новую строку.

Я обнаружил, что есть пакет nuget от SyncFusion.Можем ли мы достичь этого без использования сторонних библиотек?

Ответы [ 2 ]

0 голосов
/ 20 января 2019

Вы можете разместить просмотр списка ниже записи:

В XAML:

<Grid>
<Grid.RowDefinitions>
    <RowDefinition Height="40" />
    <RowDefinition Height="40" />                    
</Grid.RowDefinitions>    
        <Entry
            x:Name="entryMain"
            Grid.Row="0"
            TextChanged="OnEntryChanged" />
        <ListView
            x:Name="lstSuggest"
            Grid.Row="1"
            IsVisible="False"
            ItemTapped="ItemSelected"
            SeparatorVisibility="None" />
</Grid>

Код сзади:

lstSuggest.ItemsSource = _suggestion;

private void OnEntryChanged(object sender, TextChangedEventArgs e)
{            
    if (entryMain.Text != null && lstSuggest.ItemsSource != null)
    {                  
        if (_suggestion.Any(x=> x.StartsWith(e.NewTextValue)) && entryMain.Text != string.Empty)
        {
            var items = new List<string>();

            foreach (var item in _suggestion.FindAll(x => x.StartsWith(e.NewTextValue)))
            {
                items.Add(item);
            }

            lstSuggest.ItemsSource = items;
            lstSuggest.IsVisible = true;
        }
        else
        { 
            lstSuggest.IsVisible = false;
        }
    }
}

private void ItemSelected(object sender, EventArgs args)
{
    if (((ListView)sender).SelectedItem == null)
        return;

    entryMain.Text = lstSuggest.SelectedItem.ToString();
    ((ListView)sender).SelectedItem = null;
    lstSuggest.IsVisible = false;
}

Кроме того, если вы хотите удалить видимость горизонтальной полосы прокрутки в виде списка, вы можете создать собственный элемент управления.

Бонус: Android по умолчанию https://docs.microsoft.com/tr-tr/xamarin/android/user-interface/controls/auto-complete

0 голосов
/ 19 января 2019

Я бы предложил использовать EntryAutoComplete package

Использование довольно простое, просто добавьте NuGet к вашему решению, а затем на своей странице просто:

Ссылка на пространство имен сборки

xmlns:customControl="clr-namespace:EntryAutoComplete;assembly=EntryAutoComplete"

А потом,

<customControl:EntryAutoComplete
            VerticalOptions="CenterAndExpand"
            Placeholder="Enter country..." 
            ItemsSource="{Binding Countries}"
            SearchText="{Binding SearchCountry}"
            SearchMode="{Binding SearchMode}"
            MaximumVisibleElements="5"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...