Вся идея привязки данных заключается в том, чтобы отделить пользовательский интерфейс от данных. Поэтому модель данных никогда не должна содержать элементов пользовательского интерфейса.
Что вы можете сделать:
- Создайте новый класс модели, который содержит все данные, которые вы хотите отобразить в этом представлении прокрутки, для дальнейшего использования я называю его «CardViewModel».
- Добавьте свойство List CardViewData в вашу ViewModel
- Удалите задачу InitAsync из вашей ViewModel
- Убедитесь, что обе модели представлений реализуют интерфейс INotifyPropertyChanged
Теперь в представлении, потребляющем вашу ViewModel, перегрузите конструктор, чтобы принять вашу модель представления в качестве параметра.
Внутри конструктора вы перебираете элементы в списке CardViewModel и создаете Grid для каждого элемента.
public TimeTableView(ViewModel model)
{
foreach (CardViewModel cardModel in CardViewData)
{
CardView view = new CardView(cardModel);
Container.Children.Add(view);
}
}
Обратите внимание, что "Контейнер" является заполнителем для элемента, содержащего просмотры карт.
На самом деле, я бы посоветовал вам реализовать пользовательское представление, которое содержит все элементы для отображения данных вашей CardViewModel, чтобы вы могли установить контекст привязки пользовательского представления для вашей модели CardView:
public class CardView : Grid
{
public CardView(CardViewModel model)
{
BindingContext = model;
}
}
Также ScrollView может содержать только один элемент, поэтому вы не можете просто добавить в него несколько элементов.
Вам, вероятно, нужно поместить сетку в нее, а затем добавить CardViews к этой сетке.