DelayedView

RedCorners.Forms.DelayedView is a special ContentView2 control that lets its Content load after the page is loaded.

It is useful when a control is performing a lot of performance-intensive actions on its initialization, and if used normally, would block the UI thread for a while. A notable example of this is Google Maps, especially when it is set to show the current location. The Google Maps control typically blocks the thread for a noticable time during initialization, in order to fetch the current GPS location of the device.

Therefore, using Google Maps normally, would block the UI thread:

<rfm:LocationPickerView MyLocationEnabled="True" />

In such cases, performance intensive controls can be put inside a DelayedView, in order to be initialized after everything in the page is initialized and rendered:

<rf:DelayedView>
    <rfm:LocationPickerView MyLocationEnabled="True" />
</rf:DelayedView>

DelayedView offers a temporary View to be shown while its actual Content is being initialized, through its LoadingView property. This way, you can show a loading animation or a mock version of the main view, in order to keep the application’s user interface look nicer:

<rf:DelayedView>
    <rf:DelayedView.LoadingView>
        <Grid>
            <rfm:LocationPickerView MyLocationEnabled="False" InputTransparent="True" />
            <ActivityIndicator HorizontalOptions="Center" VerticalOptions="Center" />
        </Grid>
    </rf:DelayedView.LoadingView>

    <rfm:LocationPickerView MyLocationEnabled="True" />
</rf:DelayedView>

Moreover, through the Delay property, you can assign a minimum guaranteed waiting time in milliseconds before DelayedView switches to the main Content.

You can also assign an arbitrary function to act as a Job to be completed by DelayedView asynchronously, before it switches to the main Content.

DelayedView starts its jobs when it has been assigned to a Parent, and its size has been allocated. This means after its OnParentSet and OnSizeAllocated methods have been called.

The status of the DelayedView can be checked via its IsLoading boolean readonly property.

Properties

bool IsLoading { get; }

This readonly property indicates whether the main Content has been loaded or not.

View LoadingView

This property overrides the temporary view shown when DelayedView is performing its tasks, prior to switching to the main Content.

int Delay

This property adjusts the minimum guaranteed waiting time (in milliseconds) before switching to the main Content.

[ContentProperty] View Content

This property contains the main View to be shown after the job is finished.

Func<object, Task> Job

This property lets you assign an arbitrary task to the DelayedView to be executed asynchronously during its loading stage. In case a Job is assigned, the loading will continue until the Job is finished.

object JobParameter

This bindable property lets you assign a parameter to the Job function.