Как использовать строку для отображения данных в AutoSuggestBox в UWP - PullRequest
0 голосов
/ 28 апреля 2019

Я пытаюсь использовать AutoSuggestBox для отображения данных как набранных из строки.

Я попытался создать массив с некоторыми словами, которые будут отображаться в AutoSuggestBox в качестве пользовательских типов, однако мне нужны данные из API, которые хранятся в строке, чтобы показать в AutoSuggestBox. На данный момент я использую массив для отображения 3 слов в качестве пользовательских типов и строку, содержащую данные API, добавляемую в ListBox.

Это, однако, выполняется в методе AutoSuggestBox_TextChanged, поэтому по мере ввода пользователем пользовательские данные добавляются в ListBox.

private async void AutoSuggestBox_TextChanged(AutoSuggestBox sender, AutoSuggestBoxTextChangedEventArgs args)
        {
            string[] Autoitems = new string[] { "check", "apple", "banana" } //Temporary Array for AutoSuggestBox

            var Auto = (AutoSuggestBox)sender;
            var Suggestion = Autoitems.Where(p => p.StartsWith(Auto.Text, StringComparison.OrdinalIgnoreCase)).ToArray();
            Auto.ItemsSource = Suggestion; //This displays only items from array as being typed.

            string searchedName = SearchBox.Text;

            myFood = await NutritionixAPI.GetFood(searchedName);

            //The data I get from the API is stored in the temp string
            string temp = myFood.hits[0].fields.item_name + " Calories: " + myFood.hits[0].fields.nf_calories + " Protein: " + myFood.hits[0].fields.nf_protein + " Fat: " + myFood.hits[0].fields.nf_total_fat;
            ResultListBox.Items.Add(temp); //temp string data is added to a listbox

            Total += myFood.hits[0].fields.nf_calories;
            TotalCalories.Text = ((int)Total).ToString(); //Adds the calories of each added food to the Total Variable and Display it
        } 

Я ожидаю, что AutoSuggestBox покажет мне данные из строки как набранные. Например, «Бана» - список продуктов, всплывающих с именем Бана.

enter image description here

Но фактическим результатом является AutoSuggestBox, показывающий, что ArrayData и данные API в строке добавляются в ListBox как набранные.

1 Ответ

0 голосов
/ 02 мая 2019

Я хочу, чтобы содержимое нижней стрелки отображалось в левой стрелке.Таким образом, Bana Krisp Fruit Crackers Калории: 150 белка, который будет отображаться в текстовом поле, где (банан) - первая стрелка влево.

По вашему требованию вы можете получить напечатанные данные с помощью NutritionixAPI, а затем преобразоватьданные для форматирования строки.Создайте новый список для источника элементов AutoSuggestBox, в котором сохранена строка формата.

private async void AutoSuggestBox_TextChanged(AutoSuggestBox sender, AutoSuggestBoxTextChangedEventArgs args)
{
    switch (args.Reason)
    {
        case AutoSuggestionBoxTextChangeReason.ProgrammaticChange:
        case AutoSuggestionBoxTextChangeReason.SuggestionChosen:
            sender.ItemsSource = null;
            return;
    }
    var query = sender.Text;
    var hits = await NutritionixAPI.GetFoods(query);
    List<string> items = new List<string>();
    foreach (var hit in hits)
    {
        string temp = hit.fields.item_name + " Calories: " + hit.fields.nf_serving_size_qty + " Protein: " + hit.fields.nf_serving_size_unit + " Fat: " + hit.fields.item_id;
        if (items.Exists(p => p == temp) == false)
        {
            items.Add(temp);
        }

    }
    var Suggestion = items.Where(p => p.StartsWith(sender.Text, StringComparison.OrdinalIgnoreCase)).ToArray();
    sender.ItemsSource = Suggestion;
}
...