Переместить строку на уровень выше в ListView

Имеется список дел. Сохраняется в sql. Как реализовать, чтобы по нажатию кнопки переместить текущую запись, к примеру, с третьей строки на вторую и наоборот.

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
         x:Class="MyTodoList.MainPage"
         Title="Заметки">

<StackLayout>
    <ListView x:Name="listView" 
              ItemSelected="OnListViewItemSelected">
        <ListView.ItemTemplate>
            <DataTemplate>
                <ViewCell>
                    <ViewCell.ContextActions>
                        <MenuItem Text="Delete" Clicked="OnDeleteCliked"/>
                        <MenuItem Text="Вверх" Clicked="MoveToTop"/>
                        <MenuItem Text="Вниз" Clicked="MoveToBottom"/>

                    </ViewCell.ContextActions>
                    <StackLayout Padding="16,12" Orientation="Horizontal">
                        <CheckBox IsChecked="{Binding Done}"
                                  Color="Gray"/>
                        <Label Text="{Binding Text}"
                               TextColor="Black"/>
                    </StackLayout>
                </ViewCell>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
    <Button Text="+"
            TextColor="Black"
            HorizontalOptions="Center"
            VerticalOptions="End"
            Margin="15"
            Clicked="OnAddClicked">
    </Button>
</StackLayout>
public MainPage()
    {
        InitializeComponent();
        
    }

    protected override void OnAppearing()
    {
        base.OnAppearing();
        listView.ItemsSource = App.Database.GetNotesAsync();
    }

    //добавление
    private async  void OnAddClicked(object sender, EventArgs e)
    {
        await Navigation.PushAsync(new ToDoListPage
        {
            BindingContext = new TodoModel()
        });
        
    }

    //редактирование 
    async void OnListViewItemSelected(object sender, SelectedItemChangedEventArgs e)
    {
        if (e.SelectedItem != null)
        {
            await Navigation.PushAsync(new ToDoListPage
            {
                BindingContext = e.SelectedItem as TodoModel
            });
        }
    }

    //удаление 
    private async void OnDeleteCliked(object sender, EventArgs e)
    {

        MenuItem mi = sender as MenuItem;
        var note = mi.BindingContext as TodoModel;
        await App.Database.DeleteNoteAsync(note);
        OnAppearing();

    }

    private void MoveToTop(object sender, EventArgs e)
    {

    }

    private void MoveToBottom(object sender, EventArgs e)
    {

    }
}

public class ToDoData
{
    readonly SQLiteAsyncConnection _todoData;

    public ToDoData(string dbPath)
    {
        _todoData = new SQLiteAsyncConnection(dbPath);
        _todoData.CreateTableAsync<TodoModel>().Wait();
    }

    public ObservableCollection<TodoModel> GetNotesAsync()
    {
        List<TodoModel> list = _todoData.Table<TodoModel>().ToListAsync().Result;
        ObservableCollection<TodoModel> result = new ObservableCollection<TodoModel>(list);

        return result;
    }

    public Task<TodoModel> GetNoteAsync(int id)
    {
        return _todoData.Table<TodoModel>()
                        .Where(i => i.ID == id)
                        .FirstOrDefaultAsync();
    }

    public Task<int> SaveNoteAsync(TodoModel note)
    {
        if (note.ID != 0)
        {
            return _todoData.UpdateAsync(note);
        }
        else
        {
            return _todoData.InsertAsync(note);
        }
    }

    public Task<int> DeleteNoteAsync(TodoModel note)
    {
        return _todoData.DeleteAsync(note);
    }

    
}

Ответы (0 шт):