CollectionView с использованием C# MAUI для Android ничего не показываетAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 CollectionView с использованием C# MAUI для Android ничего не показывает

Сообщение Anonymous »

Я пытаюсь изучить C# MAUI (специально для Android), однако в настоящее время мне трудно заставить работать базовое представление поиска и коллекции. Цель состоит в том, чтобы создать страницу с панелью поиска, на которой пользователь вводит ингредиенты, выполняется поиск в базе данных и обновляется представление коллекции.
В методе SearchAsync я получаю результаты обратно из репозитория. Кроме того, если я добавлю точку останова в первую строку метода, я увижу, что свойство FilteredItems содержит один элемент; тот, которым он инициализируется. Но когда страница загружается, я не вижу этот элемент в представлении коллекции. Аналогично, после поиска в представлении коллекции ничего не отображается. На вкладке «Ошибки привязки» также не отображается никаких проблем.
AutoCompletePage.xaml AutoCompletePage.xaml.cs

Код: Выделить всё

public partial class AutoCompletePage : ContentPage
{
private AutoCompletePageModel _model;

public AutoCompletePage(AutoCompletePageModel model)
{
InitializeComponent();

_model = model;
}

private void InputView_OnTextChanged(object? sender, TextChangedEventArgs e)
{
_model.SearchCommand.Execute(e.NewTextValue);
}
}
AutoCompletepageMode.cs

Код: Выделить всё

public partial class IngredientResult : ObservableObject
{
[ObservableProperty]
public int _id;

[ObservableProperty]
public string _name = string.Empty;

[ObservableProperty]
public bool _isSelected;
}

[QueryProperty(nameof(AlreadySelected), "selected")]
public partial class AutoCompletePageModel :ObservableObject, IQueryAttributable
{
[ObservableProperty] public string _placeholder = "Search ingredients...";

[ObservableProperty] public string? _searchText;

public ObservableCollection FilteredItems { get; } = new()
{
new()
{
Id = 0,
Name="Please search for ingredients above"
}
};

private List _selectedIngredients = new();

public List? AlreadySelected { get; set; }

public void ApplyQueryAttributes(IDictionary query)
{
if (query.TryGetValue("selected", out object param) && param is List selected)
{
System.Diagnostics.Debug.WriteLine("Ingredients already selected.");
}
}

[RelayCommand]
public async Task SearchAsync(string query)
{
var searchResults = new List();

if (!string.IsNullOrWhiteSpace(query)) //TODO: Why is SearchText always null?
{
using (var db = new RecipeAssistantContext())
{
searchResults = await db.Ingredients.Where(i => i.Name.ToLower().Contains(query)).ToListAsync();
}
}

var fullResults = _selectedIngredients
.Concat(searchResults.Select(i => new IngredientResult { Id = i.Id, Name = i.Name }))
.OrderBy(i => i.IsSelected).ThenBy(i =>  i.Name).Take(5).ToList();

MainThread.BeginInvokeOnMainThread(() =>
{
FilteredItems.Clear();
foreach (var item in fullResults)
{
FilteredItems.Add(item);
}
});

System.Diagnostics.Debug.WriteLine(SearchText);
}
}
Текущие проблемы, с которыми я столкнулся:
  • Я ожидал увидеть элемент в представлении коллекции «Пожалуйста, найдите ингредиенты выше» при первой загрузке страницы, но его там нет.
  • В начале и конце метода SearchAsync в FilteredItems есть элементы, но представление коллекции все равно отображается ничего.
  • При выполнении метода SearchAsync SearchText имеет значение null. В какой момент это заполняется? Я попробовал нажать Enter и нажать значок, но команда не выполняется. Вот почему мне нужно было добавить обработчик событий OnTextChanged, потому что команда не работала напрямую, даже с поведением набора инструментов сообщества.
Я впервые использую разработку C# MAUI/Android, поэтому, вероятно, упустил что-то простое, но это расстраивало меня в течение двух дней (это всего лишь моя последняя попытка, которая была наиболее близка к успеху), поэтому буду очень признателен за любую помощь и/или рекомендации.

Подробнее здесь: https://stackoverflow.com/questions/798 ... g-anything
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»