Я полагаю, ваша Student
модель должна содержать свойство ID.Вы имеете в виду, что вы хотите установить для кнопки текст «Представлять», когда значение идентификатора не равно нулю, и установить для него значение «Отсутствует» с другой стороны?
Если это так, вам не следует изменять контекст привязки кнопки.Вы можете изменить источник команды только в том случае, если хотите запустить эту команду в модели представления вместо модели Student.Вот мой XAML для вас:
<ContentPage.Resources>
<local:IDToStringConverter x:Key="IDToStringConverter"/>
</ContentPage.Resources>
<ContentPage.Content>
<StackLayout>
<ListView x:Name="list1" ItemsSource="{Binding StudentList}" HasUnevenRows="True">
<ListView.ItemTemplate >
<DataTemplate>
<ViewCell>
<StackLayout>
<Label VerticalTextAlignment="Center"
Text="{Binding StudentName}" />
<Button x:Name="mybtn"
Command="{Binding BindingContext.BtnTextCommand, Source={x:Reference list1}}"
CommandParameter="{Binding Source={x:Reference mybtn}}"
Text="{Binding ID, Converter={x:StaticResource IDToStringConverter}}"/>
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
</ContentPage.Content>
В преобразователе реализован эффект, который возвращает разные строки в зависимости от значения идентификатора:
public class IDToStringConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value != null)
{
return "Present";
}
return "Absent";
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
Обновлено:
Если вы хотите сохранить некоторые данные во время выполнения, вы можете создать статический класс:
public static class UtiClass
{
public static List<AttendanceStatusModel> AttendanceStatus { set; get; }
}
Установите его значение, прежде чем перейти на страницу 2: UtiClass.AttendanceStatus = //...
.После этого вы можете получить к нему доступ где угодно.т.е. в вашем конвертере.