.Net 6.0 МАУИ. Пользовательский интерфейс простого кода замирает на секунду, не понимая, почему

Я новичок в .net 6.0 MAUI, используя Visual Studio Community 2022 (64-разрядная версия) — текущая версия 17.5.0. Я только что написал простой код, чтобы показать математическую таблицу введенного числа при нажатии кнопки с помощью MVVM. Я показываю таблицу с помощью CollectionView, но пользовательский интерфейс на секунду зависает, не понимая, почему. Я использую CommunityToolkit.

Код XAML приведен ниже.

       <Frame Style="{StaticResource FrameBaseStyle}"
           Grid.Row="2" 
           Margin="10,10,10,0" 
           BorderColor="{StaticResource Primary}">
        <CollectionView  ItemsSource="{Binding CurrentTable}" 
                         ItemSizingStrategy="MeasureAllItems"
                         ItemsLayout="VerticleGrid"
                         Margin="10">
            <CollectionView.ItemTemplate>
                <DataTemplate>
                    <Border BackgroundColor="White" StrokeThickness="0.15">
                        <Grid ColumnDefinitions="Auto, 20*,20*,20*,30*" >
                            <Label Text="{Binding TableOf}"
                                   Style="{StaticResource LabelLocalStyle}"/>
                            <Label Text="x" 
                                   Grid.Column="1"
                                   Style="{StaticResource LabelLocalStyle}"
                                   HorizontalTextAlignment="End"
                                   FontSize="25"/>
                            <Label Text="{Binding MultiplyBy}"
                                   HorizontalOptions="End"
                                   Style="{StaticResource LabelLocalStyle}"
                                   Grid.Column="2"/>
                            <Label Text="=" 
                                   Style="{StaticResource LabelLocalStyle}"
                                   HorizontalTextAlignment="End"
                                   FontSize="25"
                                   Grid.Column="3"/>
                            <Label HorizontalTextAlignment="End"
                                   Style="{StaticResource LabelLocalStyle}"
                                   Text="{Binding Result}" 
                                   Margin="0,0,5,0"
                                   Grid.Column="4"/>
                        </Grid>
                    </Border>
                </DataTemplate>
            </CollectionView.ItemTemplate>
        </CollectionView>
    </Frame>

вызов метода GetTable() при нажатии кнопки

          private async void GetTable()
    {
        await Task.Run(() => CreateTable());
    }

    private void CreateTable()
    {
        List<Table> finalTable = new List<Table>();
        for (int i = 1; i <= 10; i++)
        {
            Table table = new Table();
            table.TableOf = TableOf;
            table.MultiplyBy = i;
            table.Result = TableOf * i;
            finalTable.Add(table);
        }
        CurrentTable = new ObservableCollection<Table>(finalTable);
    }

1 ответ

Вам не нужно определятьfinalTable, добавить элемент вCurrentTable напрямую.

Пожалуйста, обратитесь к следующему коду:

      private async void GetTable()
{
    await Task.Run(() => CreateTable());
}

private void CreateTable()
{
    CurrentTable = new ObservableCollection<Item>();
    //List<Table> finalTable = new List<Table>();
    for (int i = 1; i <= 10; i++)
    {
        Table table = new Table();
        table.TableOf = TableOf;
        table.MultiplyBy = i;
        table.Result = TableOf * i;
        //finalTable.Add(table);

        // add table to CurrentTable directlly
         CurrentTable.Add(table);
    }
    //CurrentTable = new ObservableCollection<Table>(finalTable);
}
Другие вопросы по тегам