Код IT
← Каталог

Особенности разработки десктопных приложений — 1. Асинхронная операция с обновлением UI (C# / WPF, MVVM)

Фрагмент из «Особенности разработки десктопных приложений»: 1. Асинхронная операция с обновлением UI (C# / WPF, MVVM).

XML / XAML main.xml
<!-- MainWindow.xaml -->
<Window x:Class="AsyncDemo.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        Title="Асинхронная загрузка" Height="350" Width="500">
    <Grid Margin="10">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>

        <Button Content="Загрузить данные" 
                Command="{Binding LoadDataCommand}"
                IsEnabled="{Binding IsLoading, Converter={StaticResource InverseBooleanConverter}}"
                Margin="0,0,0,10"/>

        <ProgressBar Grid.Row="1" 
                     IsIndeterminate="True"
                     Visibility="{Binding IsLoading, Converter={StaticResource BoolToVisibilityConverter}}"
                     Height="4" Margin="0,5"/>

        <ListBox Grid.Row="1" 
                 ItemsSource="{Binding Items}"
                 Visibility="{Binding IsLoading, Converter={StaticResource InverseBoolToVisibilityConverter}}"
                 Margin="0,10,0,0"/>
    </Grid>
</Window>
<!-- MainWindow.xaml -->
<Window x:Class="AsyncDemo.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        Title="Асинхронная загрузка" Height="350" Width="500">
    <Grid Margin="10">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>

        <Button Content="Загрузить данные" 
                Command="{Binding LoadDataCommand}"
                IsEnabled="{Binding IsLoading, Converter={StaticResource InverseBooleanConverter}}"
                Margin="0,0,0,10"/>

        <ProgressBar Grid.Row="1" 
                     IsIndeterminate="True"
                     Visibility="{Binding IsLoading, Converter={StaticResource BoolToVisibilityConverter}}"
                     Height="4" Margin="0,5"/>

        <ListBox Grid.Row="1" 
                 ItemsSource="{Binding Items}"
                 Visibility="{Binding IsLoading, Converter={StaticResource InverseBoolToVisibilityConverter}}"
                 Margin="0,10,0,0"/>
    </Grid>
</Window>