Как обеспечить автоматическое масштабирование для CollectionView в объекте Popup из CommunityToolkit.Maui после его заполнения с помощью события нажатия кнопки на платформе Windows?

Я пытаюсь обеспечить автоматическую регулировку высоты для объекта CollectionView в наборе инструментов: Popup. Во всплывающем окне есть заголовок, запись и кнопка, которые вызывают команду для заполнения CollectionView под ним, но она не отображает никакого результата, поскольку высота Popup или CollectionView не увеличивается. На платформе Android все работает нормально, а на Windows работает только в режиме горячей перезагрузки после изменения HeightRequest или MiniminHeightRequest и после повторной отладки снова не работает.

Вот код элемента Popup:

<?xml version = "1.0" encoding = "utf-8" ?>
<toolkit:Popup xmlns = "http://schemas.microsoft.com/dotnet/2021/maui"
               xmlns:x = "http://schemas.microsoft.com/winfx/2009/xaml"
               x:Class = "SimpleRunManager.Views.Popups.SetStaticLocalizationPopup"
               xmlns:toolkit = "http://schemas.microsoft.com/dotnet/2022/maui/toolkit"
               xmlns:viewmodel = "clr-namespace:SimpleRunManager.ViewModels"
               x:DataType = "viewmodel:SetStaticLocalizationPopupViewModel"
               xmlns:model = "clr-namespace:SimpleRunManager.Models"
               Color = "{StaticResource MainPopup}"
               CanBeDismissedByTappingOutsideOfPopup = "True"
               HorizontalOptions = "{OnPlatform Default='Fill', WinUI='Center'}"
               VerticalOptions = "Center">
    <!-- TODO -> style -->
    <VerticalStackLayout MinimumWidthRequest = "{OnPlatform WinUI='500'}"
                         BackgroundColor = "{StaticResource MainPopup}"
                         MaximumHeightRequest = "{OnPlatform WinUI='601'}"
                         VerticalOptions = "FillAndExpand">
        <Grid ColumnDefinitions = "{OnPlatform Default='*,auto', WinUI='*,*'}">
            <Label Grid.ColumnSpan = "{OnPlatform Default='1', WinUI='2'}"
                   Text = "Set localization"
                   VerticalOptions = "Center" 
                   HorizontalOptions = "CenterAndExpand" 
                   Style = "{StaticResource HeaderLabel}"
                   FontAttributes = "Bold"
                   Padding = "10,20,10,20"/>
            <Button Grid.Column = "1"
                    Text = "Delete"
                    Style = "{StaticResource DangerButton}"
                    HorizontalOptions = "End"
                    Margin = "0,20,15,20"
                    Command = "{Binding DeleteStaticLocalizationCommand}"
                    CommandParameter = "{Binding Source = {RelativeSource Mode=FindAncestor, AncestorType = {x:Type toolkit:Popup}}}"></Button>
        </Grid>
        
        <Grid ColumnDefinitions = "*,*"
              ColumnSpacing = "15"
              Padding = "15,0,15,20">
            <Entry Placeholder = "City name" 
                   Text = "{Binding CityName}"
                   Grid.Column = "0"
                   TextColor = "Snow"></Entry>
            <Button Text = "Search"
                    Command = "{Binding SearchCommand}"
                    CommandParameter = "{Binding Source = {RelativeSource Mode=FindAncestor, AncestorType = {x:Type toolkit:Popup}}}"
                    Grid.Column = "1"></Button>
        </Grid>
        <CollectionView IsVisible = "{Binding IsSearched}"
                        ItemsSource = "{Binding CityChoices}">
            <CollectionView.ItemTemplate>
                <DataTemplate x:DataType = "model:CityInfo">
                    <VerticalStackLayout HorizontalOptions = "FillAndExpand"
                                             Padding = "10,20,10,20"
                                             HeightRequest = "100">
                            <VerticalStackLayout.GestureRecognizers>
                                <TapGestureRecognizer CommandParameter = "{Binding .}" Command = "{Binding Source = {RelativeSource AncestorType = {x:Type viewmodel:SetStaticLocalizationPopupViewModel}}, Path=SetChosenCityCommand}"></TapGestureRecognizer>
                            </VerticalStackLayout.GestureRecognizers>
                            <Label Style = "{StaticResource CityInfoLabel}">
                                <Label.Text>
                                    <MultiBinding StringFormat = "{}{0} - {1}">
                                        <Binding Path = "CityName"></Binding>
                                        <Binding Path = "CountryName"></Binding>
                                    </MultiBinding>
                                </Label.Text>
                            </Label>
                            <Label Style = "{StaticResource CityInfoLabel}">
                                <Label.Text>
                                    <MultiBinding StringFormat = "{}({0} | {1})">
                                        <Binding Path = "Lat"></Binding>
                                        <Binding Path = "Lon"></Binding>
                                    </MultiBinding>
                                </Label.Text>
                            </Label>
                        </VerticalStackLayout>

                    
                </DataTemplate>
            </CollectionView.ItemTemplate>
            <CollectionView.EmptyView>
                <Label IsVisible = "{Binding IsSearched}"
                       Text = "Failed to find city with that name"
                       Style = "{StaticResource CityInfoLabel}"
                       Padding = "10,20,10,20"
                       TextColor = "OrangeRed"></Label>
            </CollectionView.EmptyView>
        </CollectionView>
    </VerticalStackLayout>
</toolkit:Popup>

Вот ссылка на видео, где я показал свою проблему: Видео на Google Диске

Я уже пробовал такие параметры изменения, как HorizontalOptions, Вертикальные параметры, Минимальная/Максимальная ширина/Высота, и даже пытался использовать Grid вместо ВертикальногоStackLayout.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
53
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

На платформе Android все работает нормально, а на Windows работает только в режиме горячей перезагрузки после изменения HeightRequest или MiniminHeightRequest и после повторной отладки снова не работает.

Я воспроизвел это как ваше видеошоу. Я также пытался использовать Grid, чтобы обернуть все содержимое всплывающего окна, но это закончилось неудачей. Вы можете сообщить об этом в MAUI или CommunityToolkit на GitHub. Сообщите нашим разработчикам и разберитесь с этим.

Ответ принят как подходящий

Вот мое решение и то, как я справился с этой проблемой: Там, где я разместил логику загрузки и заполнения ObservableColletion для Popup, где заканчивается весь процесс, я добавил этот код:

#if WINDOWS
            _thisPopup!.Content!.MinimumHeightRequest = 1;
#endif

(_thisPopup — текущий объект Popup)

После этих изменений все работает нормально на платформе Windows.

Другие вопросы по теме