From 157d22a8f979d9defc7e1d2cb78f3220a65eebdc Mon Sep 17 00:00:00 2001 From: Zhang Dian <54255897+zdpcdt@users.noreply.github.com> Date: Sat, 24 Feb 2024 16:49:31 +0800 Subject: [PATCH] feat: implement RefreshContainer. --- .../Pages/RefreshContainerDemo.axaml | 20 ++++++++-- .../Pages/RefreshContainerDemo.axaml.cs | 38 +++++++++++++++++-- .../Controls/RefreshContainer.axaml | 23 +++++------ 3 files changed, 63 insertions(+), 18 deletions(-) diff --git a/demo/Semi.Avalonia.Demo/Pages/RefreshContainerDemo.axaml b/demo/Semi.Avalonia.Demo/Pages/RefreshContainerDemo.axaml index de3762c..4bb484e 100644 --- a/demo/Semi.Avalonia.Demo/Pages/RefreshContainerDemo.axaml +++ b/demo/Semi.Avalonia.Demo/Pages/RefreshContainerDemo.axaml @@ -4,12 +4,24 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" + xmlns:pages="clr-namespace:Semi.Avalonia.Demo.Pages" d:DesignHeight="450" d:DesignWidth="800" + x:DataType="pages:RefreshContainerDemoViewModel" + x:CompileBindings="True" mc:Ignorable="d"> - - - + + + + - + diff --git a/demo/Semi.Avalonia.Demo/Pages/RefreshContainerDemo.axaml.cs b/demo/Semi.Avalonia.Demo/Pages/RefreshContainerDemo.axaml.cs index 0add79b..7e13123 100644 --- a/demo/Semi.Avalonia.Demo/Pages/RefreshContainerDemo.axaml.cs +++ b/demo/Semi.Avalonia.Demo/Pages/RefreshContainerDemo.axaml.cs @@ -1,14 +1,46 @@ -using Avalonia; +using System.Collections.ObjectModel; +using System.Linq; +using System.Threading.Tasks; using Avalonia.Controls; -using Avalonia.Interactivity; -using Avalonia.Markup.Xaml; +using CommunityToolkit.Mvvm.ComponentModel; namespace Semi.Avalonia.Demo.Pages; public partial class RefreshContainerDemo : UserControl { + private RefreshContainerDemoViewModel _viewModel; + public RefreshContainerDemo() { InitializeComponent(); + + _viewModel = new RefreshContainerDemoViewModel(); + + DataContext = _viewModel; + } + + private async void RefreshContainerPage_RefreshRequested(object? sender, RefreshRequestedEventArgs e) + { + var deferral = e.GetDeferral(); + + await _viewModel.AddToTop(); + + deferral.Complete(); + } +} + +public class RefreshContainerDemoViewModel : ObservableObject +{ + public ObservableCollection Items { get; } + + public RefreshContainerDemoViewModel() + { + Items = new ObservableCollection(Enumerable.Range(1, 200).Select(i => $"Item {i}")); + } + + public async Task AddToTop() + { + await Task.Delay(1000); + Items.Insert(0, $"Item {200 - Items.Count}"); } } \ No newline at end of file diff --git a/src/Semi.Avalonia/Controls/RefreshContainer.axaml b/src/Semi.Avalonia/Controls/RefreshContainer.axaml index 238c078..48e2d0a 100644 --- a/src/Semi.Avalonia/Controls/RefreshContainer.axaml +++ b/src/Semi.Avalonia/Controls/RefreshContainer.axaml @@ -30,19 +30,20 @@ + + + - - - - - + - + \ No newline at end of file