.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);
}