diff --git a/src/MAUI/TinyMvvm.Maui/ITinyViewModel.cs b/src/MAUI/TinyMvvm.Maui/ITinyViewModel.cs
index b140fc9..8118f4e 100644
--- a/src/MAUI/TinyMvvm.Maui/ITinyViewModel.cs
+++ b/src/MAUI/TinyMvvm.Maui/ITinyViewModel.cs
@@ -18,7 +18,7 @@ public interface ITinyViewModel
/// This method runs when navigation parameters are set.
///
///
- Task ParameterSet();
+ Task OnParameterSet();
///
/// This method will run every time the view is apperaing.
diff --git a/src/MAUI/TinyMvvm.Maui/TinyView.cs b/src/MAUI/TinyMvvm.Maui/TinyView.cs
index 60a43c4..18da4db 100644
--- a/src/MAUI/TinyMvvm.Maui/TinyView.cs
+++ b/src/MAUI/TinyMvvm.Maui/TinyView.cs
@@ -4,29 +4,40 @@ public abstract class TinyView : ContentPage
{
internal SemaphoreSlim InternalLock { get; private set; } = new SemaphoreSlim(1, 1);
- protected override void OnBindingContextChanged()
+ protected override async void OnBindingContextChanged()
{
base.OnBindingContextChanged();
if (BindingContext is ITinyViewModel viewModel)
{
- try
+ if (!viewModel.IsInitialized)
{
- if (!viewModel.IsInitialized)
+
+ async Task InternalInitialize()
{
- MainThread.BeginInvokeOnMainThread(async () =>
+ try
{
await InternalLock.WaitAsync();
await viewModel.Initialize();
viewModel.IsInitialized = true;
- });
+ }
+ finally
+ {
+ InternalLock.Release();
+ }
+ }
+
+ if (MainThread.IsMainThread)
+ {
+ await InternalInitialize();
+ }
+ else
+ {
+ MainThread.BeginInvokeOnMainThread(async () => await InternalInitialize());
}
}
- finally
- {
- InternalLock.Release();
- }
+
}
}
diff --git a/src/MAUI/TinyMvvm.Maui/TinyViewModel.cs b/src/MAUI/TinyMvvm.Maui/TinyViewModel.cs
index 34a49bb..cc50cd0 100644
--- a/src/MAUI/TinyMvvm.Maui/TinyViewModel.cs
+++ b/src/MAUI/TinyMvvm.Maui/TinyViewModel.cs
@@ -34,7 +34,7 @@ public TinyViewModel()
///
- public virtual Task ParameterSet() => Task.CompletedTask;
+ public virtual Task OnParameterSet() => Task.CompletedTask;
///
public virtual Task OnAppearing()
@@ -90,7 +90,7 @@ public INavigation Navigation
[ObservableProperty]
[NotifyPropertyChangedFor(nameof(IsNotBusy))]
private bool _isBusy;
-
+
///
public bool IsNotBusy
@@ -104,7 +104,7 @@ public bool IsNotBusy
[ObservableProperty]
[NotifyPropertyChangedFor(nameof(IsNotInitialized))]
private bool _isInitialized;
-
+
///
public bool IsNotInitialized
@@ -121,7 +121,7 @@ public bool IsNotInitialized
///
public async void ApplyQueryAttributes(IDictionary query)
{
- if(query == null || query.Count == 0)
+ if (query == null || query.Count == 0)
{
return;
}
@@ -152,20 +152,15 @@ public async void ApplyQueryAttributes(IDictionary query)
QueryParameters = query;
}
- async Task RunParameterSet()
- {
- await ParameterSet();
- }
-
if (MainThread.IsMainThread)
{
- await RunParameterSet();
+ await OnParameterSet();
}
else
{
MainThread.BeginInvokeOnMainThread(async () =>
{
- await RunParameterSet();
+ await OnParameterSet();
});
}
}
diff --git a/src/MAUI/TinyMvvm.Sample/ViewModels/DetailsViewModel.cs b/src/MAUI/TinyMvvm.Sample/ViewModels/DetailsViewModel.cs
index 0810030..4e59c23 100644
--- a/src/MAUI/TinyMvvm.Sample/ViewModels/DetailsViewModel.cs
+++ b/src/MAUI/TinyMvvm.Sample/ViewModels/DetailsViewModel.cs
@@ -13,7 +13,7 @@ public DetailsViewModel(ICityService cityService)
this.cityService = cityService;
}
- public override async Task ParameterSet()
+ public override async Task OnParameterSet()
{
IsBusy = true;
diff --git a/src/MAUI/TinyMvvm.Sample/ViewModels/ListViewModel.cs b/src/MAUI/TinyMvvm.Sample/ViewModels/ListViewModel.cs
index 897594f..55dc6c4 100644
--- a/src/MAUI/TinyMvvm.Sample/ViewModels/ListViewModel.cs
+++ b/src/MAUI/TinyMvvm.Sample/ViewModels/ListViewModel.cs
@@ -21,7 +21,7 @@ public override async Task Initialize()
IsBusy = true;
var result = await cityService.GetAll();
- Cities = new ObservableCollection(result);
+ Cities = new ObservableCollection(result.Take(100));
IsBusy = false;
}