Skip to content

Commit 4abec86

Browse files
committed
Refresh now passes completion action
So that the choice of when to end showing the refresh indicator can be managed by the consumer.
1 parent 976b760 commit 4abec86

File tree

7 files changed

+23
-12
lines changed

7 files changed

+23
-12
lines changed

Sample/VirtualListViewSample/MainViewModel.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,11 @@ public MainViewModel()
1515
MusicDataAdapter adapter;
1616

1717
[RelayCommand]
18-
async Task Refresh()
18+
async Task Refresh(Action completion)
1919
{
2020
await Task.Delay(3000);
21+
System.Diagnostics.Debug.WriteLine("Refresh Complete");
22+
completion?.Invoke();
2123
}
2224

2325
[RelayCommand]

VirtualListView/Apple/VirtualListViewHandler.ios.maccatalyst.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,7 @@ protected override UICollectionView CreatePlatformView()
3939
refreshControl.AddTarget(new EventHandler((s, a) =>
4040
{
4141
refreshControl.BeginRefreshing();
42-
VirtualView?.Refresh();
43-
refreshControl.EndRefreshing();
44-
42+
VirtualView?.Refresh(() => refreshControl.EndRefreshing());
4543
}), UIControlEvent.ValueChanged);
4644

4745
collectionView.AddSubview(refreshControl);

VirtualListView/Controls/VirtualListView.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -111,16 +111,16 @@ public Maui.SelectionMode SelectionMode
111111

112112
public event EventHandler<SelectedItemsChangedEventArgs> OnSelectedItemsChanged;
113113

114-
public event EventHandler<EventArgs> OnRefresh;
114+
public event EventHandler<RefreshEventArgs> OnRefresh;
115115

116-
void IVirtualListView.Refresh()
116+
void IVirtualListView.Refresh(Action completionCallback)
117117
{
118118
if (RefreshCommand != null && RefreshCommand.CanExecute(null))
119119
{
120-
RefreshCommand.Execute(null);
120+
RefreshCommand.Execute(completionCallback);
121121
}
122122

123-
OnRefresh?.Invoke(this, EventArgs.Empty);
123+
OnRefresh?.Invoke(this, new RefreshEventArgs(completionCallback));
124124
}
125125

126126
public ICommand RefreshCommand

VirtualListView/IVirtualListView.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public interface IVirtualListView : IView
2626

2727
Color RefreshAccentColor { get; }
2828

29-
void Refresh();
29+
void Refresh(Action completionCallback);
3030

3131
bool IsRefreshEnabled { get; }
3232

VirtualListView/Platforms/Android/VirtualListViewHandler.android.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,7 @@ protected override void ConnectHandler(FrameLayout nativeView)
3737
{
3838
swipeRefreshLayout.SetOnRefreshListener(new SrlRefreshListener(() =>
3939
{
40-
VirtualView?.Refresh();
41-
swipeRefreshLayout.Refreshing = false;
40+
VirtualView?.Refresh(() => swipeRefreshLayout.Refreshing = false);
4241
}));
4342

4443
layoutManager = new LinearLayoutManager(Context);
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
namespace Microsoft.Maui;
2+
3+
public class RefreshEventArgs : EventArgs
4+
{
5+
public RefreshEventArgs(Action completion)
6+
: base()
7+
{
8+
Complete = completion;
9+
}
10+
11+
public readonly Action Complete;
12+
}

VirtualListView/SelectedItemsChangedEventArgs.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,4 @@ public SelectedItemsChangedEventArgs(
1414
public IReadOnlyList<ItemPosition> PreviousSelection { get; }
1515

1616
public IReadOnlyList<ItemPosition> NewSelection { get; }
17-
}
17+
}

0 commit comments

Comments
 (0)