Как показать видимость элемента управления с помощью быстрой привязки - PullRequest
1 голос
/ 17 октября 2019

Это моя ViewModel со свойством bool и string:

ViewModel : ValidatableBindableBase {
    private bool _isBusy;
    public bool IsBusy {
        get { return _isBusy; }
        set { SetProperty(ref _isBusy, value); }
    }

    private string _busyMessage;
    public string BusyMessage {
        get { return _busyMessage; }
        set { SetProperty(ref _busyMessage, value); }
    }

//Triggered when the button is clicked.
private async void Login() {
        ShowBusyOverlay("Signing in");
        // it will show if task.delay is added
        //await Task.Delay(5000);
        await loginService.SignIn();         
}

private async  void ShowBusyOverlay(string message) {
            IsBusy = true;
            BusyMessage = message;
    }
}

XAML: ПРИМЕЧАНИЕ: в Windows 10 15063 Visibility может связывать свойство bool без конвертера

<Grid Grid.RowSpan="3" Grid.ColumnSpan="3" Visibility="{Binding Path=IsBusy, UpdateSourceTrigger=PropertyChanged}">
        <Rectangle Fill="Black" Opacity="0.4" />
        <StackPanel VerticalAlignment="Center" HorizontalAlignment="Center">
            <ProgressRing IsActive="True" Width="40" Height="40"/>
            <TextBlock Text="{Binding BusyMessage}" FontSize="20" FontWeight="Thin"/>
        </StackPanel>
    </Grid>

Цель:

enter image description here

Он не показывает сетку достаточно быстро, поэтому он перейдет на другую страницу, не показывая ее, как я могу показать эту загрузку / сетку, как толькокак это идет к моему ShowBusyOverlay? и это целесообразно?

1 Ответ

1 голос
/ 18 октября 2019

как я могу показать эту загрузку / сетку, как только она перейдет на мой ShowBusyOverlay?

Путем синхронной ее активации и затем предоставления времени потока пользовательского интерфейса для обновления экрана.

Пример:

private async void Login() 
{
    BusyMessage = message;
    IsBusy = true;
    await Task.Delay( TimeSpan.FromSeconds( 10 ) );
    IsBusy = false;
}

Если, однако, какая-либо задача, которую вы выполняете асинхронно, закончена довольно быстро (или выполняется синхронно), оверлей занятости просто мигает или не появляется вообще. Я бы сделал так, чтобы он появлялся и исчезал, вместо того, чтобы сразу появляться / исчезать, чтобы уменьшить видимость / раздражающую вспышку.

...