Вы можете решить эту проблему, используя BindableLayouts .
Следующий код очень похож на то, что вам нужно. Я написал базовые модели c, вы всегда можете реализовать интерфейс INotifyPropertyChanged
, если вам это нужно.
Модель / ViewModel:
public class CardModel
{
public string TaskHeading { get; set; }
public string PeopleHeading { get; set; }
public CardItemModel[] Items { get; set; }
public class CardItemModel
{
public string Mark { get; set; }
public string Description { get; set; }
}
}
public class CardsPageViewModel
{
public CardModel[] Tasks { get; set; }
public CardsPageViewModel()
{
Tasks = Enumerable.Range(1, 10).Select(i =>
new CardModel
{
TaskHeading = $"TaskHeading {i}",
PeopleHeading = $"People Heading {i}",
Items = Enumerable.Range(1, 4).Select(j =>
new CardModel.CardItemModel
{
Mark = $"Mark {j}",
Description = $"Description {j}"
}).ToArray()
}).ToArray();
}
}
XAML:
...
<ScrollView>
<StackLayout BindableLayout.ItemsSource="{Binding Tasks, Mode=OneWay}">
<BindableLayout.ItemTemplate>
<DataTemplate>
<Frame>
<StackLayout>
<Label Text="{Binding TaskHeading, Mode=OneWay}" FontAttributes="Bold"/>
<Label Text="{Binding PeopleHeading, Mode=OneWay}"/>
<StackLayout BindableLayout.ItemsSource="{Binding Items, Mode=OneWay}" BackgroundColor="LightPink">
<BindableLayout.ItemTemplate>
<DataTemplate>
<StackLayout Orientation="Horizontal">
<Label Text="{Binding Mark, Mode=OneWay}"/>
<Label Text="{Binding Description, Mode=OneWay}"/>
</StackLayout>
</DataTemplate>
</BindableLayout.ItemTemplate>
</StackLayout>
</StackLayout>
</Frame>
</DataTemplate>
</BindableLayout.ItemTemplate>
</StackLayout>
</ScrollView>
...
Вывод:
![enter image description here](https://i.stack.imgur.com/8sOCR.png)
EDIT: I forgot to add the ViewBox separator and Frame CornerRadius and BorderColor.
введите описание изображения здесь