Community Toolkit에 원하는 타이밍에 View를 로딩할수 있는 LazyView라는 컨트롤이 있습니다.
<toolkit:LazyView x:Name="LazyUserAction" x:TypeArguments="local:LazyTestView" />
공식 문서상에 View를 따로 만들고 x:TypeArguments=“local:LazyTestView” 이런식으로 사용하라고 적혀있는데
using CommunityToolkit.Maui.Views;
public partial class MyLazyView : LazyView
{
readonly Grid MainContentGrid = [];
public IList<Microsoft.Maui.IView> LazyViewContent => MainContentGrid.Children;
public bool UseActivityIndicator { get; set; } = true;
public MyLazyView()
{
}
public override async ValueTask LoadViewAsync()
{
if (UseActivityIndicator)
{
Grid grid = [];
grid.Add(new ActivityIndicator { IsRunning = true,
VerticalOptions = LayoutOptions.Center,
HorizontalOptions = LayoutOptions.Center });
Content = grid;
}
await Task.Delay(500);
Content = MainContentGrid;
SetHasLazyViewLoaded(true);
}
}
이런식으로 컨트롤을따로 만들어서
<controls:MyLazyView x:Name="lazyView">
<controls:MyLazyView.LazyViewContent>
<Grid/>
</controls:MyLazyView.LazyViewContent>
</controls:MyLazyView>
View 선언없이 바로 콘텐츠를 넣고
public MyPage()
{
InitializeComponent();
Task.Run(
async () =>
{
await Task.Delay(50);
await MainThread.InvokeOnMainThreadAsync(async () =>
{
await lazyView.LoadViewAsync();
});
});
}
/*protected override async void OnAppearing()
{
await lazyView.LoadViewAsync();
base.OnAppearing();
}*/
바로바로 사용하고있습니다.