LazyView View없이 사용하기

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();
}*/

바로바로 사용하고있습니다.

5개의 좋아요