Я очень новичок в Xamarin.Forms и разрабатываю свое первое приложение (для Android и IoS).
У меня есть набор информации для отображения в Grid Layout внутри a ListView (источник данных установлен в коде позади).
Я должен изменить цвет фреймов и текст относительных меток, основываясь на некоторых значениях, которые есть в исходных данных.
Вот рабочий код (с использованием заполнителей в качестве цвета рамки и текста метки):
XAML:
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Grid x:Name="GridLayout" Padding="20">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Label Text="{Binding Name}" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" FontSize="18" TextColor="Black" FontAttributes="Bold" />
<Label Text="{Binding LessonDate}" Grid.Row="1" Grid.Column="0" FontSize="14" TextColor="Gray" />
<Label Text="{Binding StartEndTime}" Grid.Row="1" Grid.Column="1" FontSize="14" TextColor="Gray" Margin="-30,0,0,0"/>
<Frame Grid.Row="2" Grid.Column="0"
CornerRadius="15"
Padding="0"
BackgroundColor="Silver"
Margin="0,10,0,10"
HasShadow="False"
WidthRequest="125"
x:Name="UserStatusFrame">
<Label Text="Placeholder" Margin="5" HorizontalOptions="Center" BackgroundColor="Transparent"
TextColor="Gray" x:Name="UserStatusLabel"/>
</Frame>
<Frame Grid.Row="2" Grid.Column="1"
CornerRadius="15"
Padding="0"
BackgroundColor="Yellow"
Margin="0,10,0,10"
HasShadow="False"
WidthRequest="125"
x:Name="CourseStatusFrame">
<Label Text="Placeholder" Margin="5" HorizontalOptions="Center" BackgroundColor="Transparent"
TextColor="Black" x:Name="CourseStatusLabel" />
</Frame>
</Grid>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
Код сзади:
protected override void OnAppearing()
{
base.OnAppearing();
FillUncompletedLessonsList(); // fills the list from a rest WS using a simple model class
LessonsListview.ItemsSource = UncompletedLessonsList;
SetListViewFormat();
}
То, что мне было интересно, - это создать функцию SetListViewFormat, в которой я могу управлять текстами меток и цветами рамки из кода на основе определенных критериев данных.
Например, что-то вроде:
foreach item in the list {
if UncompletedLessonsList.completed == true {
UserStatusLabel.Text = "Completed"
UserStatusFrame.BackgroundColor = "Green"
}
}
Но я не могу понять, каким образом я могу динамически получить доступ к этим настройкам ..
Заранее спасибо за помощь!
Редактировать 1 - Модель данных:
UncompletedLessonsList - список уроков
public class Lesson
{
public string Name { get; set; }
public string Description { get; set; }
public string LessonDate { get; set; }
public string StartEndTime { get; set; }
public string Location { get; set; }
public string State { get; set; }
public bool Completed { get; set; }
public RestWSTeacher Teacher { get; set; }
public List<Activity> Activities { get; set; }
}