Установите переключатель на false с моим кодом, если метод вызывается - PullRequest
0 голосов
/ 11 февраля 2020

Я пытаюсь установить переключатель в положение false, если из моего кода был вызван метод. Вот мой xaml для кнопки:

<ToggleButton x:Name="StartScan" Grid.Column="1" Margin="20,0,0,0" Content="Start" IsChecked="False" Click="StartScan_Click" Width="80" />
<ProgressBar Name="pbStatus" Grid.Column="2" Height="22" Width="50" Minimum="0" Maximum="100">
    <ProgressBar.Style>
        <Style TargetType="ProgressBar">
            <Setter Property="IsIndeterminate" Value="False"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding IsChecked, ElementName=StartScan}" Value="True">
                    <Setter Property="IsIndeterminate" Value="True"/>
                </DataTrigger>
                <DataTrigger Binding="{Binding IsChecked, ElementName=StartScan}" Value="false">
                    <Setter Property="IsIndeterminate" Value="False"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </ProgressBar.Style>
</ProgressBar>

И что я делаю, это вызываю метод, если я нажимаю кнопку Toogle, это работает, но было бы очень приятно, чтобы кнопка переключения установилась на IsChecked="False" после запуск моего метода.

То есть метод, который я вызываю с помощью кнопки Toogle в моем коде:

async void StartScan_Click(object sender, RoutedEventArgs e)
{
    await Task.Run(getAll);
    await Task.Delay(1000);
    await Task.Run(getGroups);
    await Task.Delay(1000);
    await Task.Run(GetUsers);

    //not working
    pbStatus.IsIndeterminate = false;
    StartScan.IsChecked = false; 
}

1 Ответ

0 голосов
/ 11 февраля 2020

Прежде всего, очень трудно понять, что вы освобождаетесь от этого кода. Вы смешали два подхода. Попробуйте go либо XAML, либо любой код позади, но не пытайтесь полностью реализовать оба подхода, поскольку вы ничего не получаете и теряете читаемость.

Если вы хотите сделать это в коде позади, то избавьтесь от всех стили в XAML и оставьте определение простым:

<ToggleButton x:Name="StartScan" Content="Start" IsChecked="False" Click="StartScan_Click" Width="80" />
<ProgressBar Name="pbStatus" Height="22" Width="80" Minimum="0" Maximum="100" IsIndeterminate="False"/>

В коде постарайтесь немедленно установить прогресс на неопределенный. После этого выполните ваши задачи, а затем установите состояние элементов управления на то, что было ранее. Кроме того, я бы посоветовал вам отключить кнопку на время выполнения ваших задач, в противном случае пользователь может нажать ее несколько раз.

private async void StartScan_Click(object sender, RoutedEventArgs e)
{
    pbStatus.IsIndeterminate = true;
    StartScan.IsEnabled = false;

    await Task.Delay(5000);

    pbStatus.IsIndeterminate = false;
    StartScan.IsEnabled = true;
    StartScan.IsChecked = false;
}
...