Как изменить определенные элементы ListView для публикации обратно в БД - MVVM - PullRequest
2 голосов
/ 17 мая 2019

У меня есть ListView с Button, показывающим статус A (отсутствует), P (присутствует) и L (поздно) для каждого элемента.В Button нажмите статус Text изменив P на A, A на L.

При изменении статуса любого элемента мне нужно изменить поля AttendanceId, AttendanceTypeStatusCD, AttendanceTypeStatusId длята же запись.Это я должен сделать для нескольких записей.Мне нужно обновить источник ListView StudentList в соответствии с выполненным действием и опубликовать измененные данные в дБ.

<ListView x:Name="list1"  ItemsSource="{Binding StudentList}">
<ListView.ItemTemplate>
    <DataTemplate>
        <ViewCell>
            <StackLayout>
                <Image Source="other.png" />
                <Label Text="{Binding StudentName}" />
                <Button x:Name="mybtn"                                
                    BindingContext="{Binding Source={x:Reference list1}, Path=BindingContext}" 
                    Command="{Binding BtnTextCommand}" 
                    CommandParameter="{Binding Source={x:Reference mybtn}}"                       
                    Text="{Binding AttendanceTypeStatusId, Converter={x:StaticResource IDToStringConverter}}" />
            </StackLayout>
        </ViewCell>
    </DataTemplate>
</ListView.ItemTemplate>
</ListView>

Это мой класс модели

    public class Student
    {
        public int? StudentId { get; set; }
        public string StudentName { get; set; }
        public int? AttendanceTypeStatusId { get; set; }
        public string ClassLevelCd { get; set; }
        public int? StudentDailyAttendanceId { get; set; }
        public int? AbsentReasonId { get; set; }
        public string AttendanceTypeStatusCD { get; set; }
        public string Name { get; set; }
        public string LoggedInUser { get; set; }
        public string ImageValue { get; set; }
        public string FirstName { get; set; }
    }

Этометод во ViewModel для изменения текста определенного элемента

public void SetBtnText(object sender)
{
    var view = sender as Xamarin.Forms.Button;
    if (view.Text == "P")
    {
        view.Text = "A";               
        AbsentReasonId = "3001";
        AttendanceTypeStatusCD= "Absent";
        AttendanceTypeStatusId = "3002";
    }
    else if (view.Text == "A")
    {
        view.Text = "L";
        AbsentReasonId= "2001";
        AttendanceTypeStatusCD = "Late";
        AttendanceTypeStatusId = "2002";
    }
    else
    {
        view.Text = "P";
        AbsentReasonId = "4001";
        AttendanceTypeStatusCD = "Present";
        AttendanceTypeStatusId = "4002";
    }
}
//Above used properties
private string _absentReasonId;
public string AbsentReasonId
{
    get { return _absentReasonId; }
    set { SetProperty(ref _absentReasonId, value); }
}


private string _attendanceTypeStatusCD;

public string AttendanceTypeStatusCD
{
    get { return _attendanceTypeStatusCD; }
    set { SetProperty(ref _attendanceTypeStatusCD, value); }
}

private int _attendanceTypeStatusId;
public int AttendanceTypeStatusId
{
    get{return _attendanceTypeStatusId;}
    set { SetProperty(ref _attendanceTypeStatusId, value); }
}

Вышеописанный процесс не работает , источник SutdentList не изменяется, как я могу это сделать с помощью MVVM?

Скриншот списка студентов

enter image description here

...