Проблема с привязкой Xamarin.Forms - последняя команда кнопки не работает - PullRequest
0 голосов
/ 17 июня 2020

У меня проблема с выполнением последней кнопки на iOS.

Если выбран элемент в списке, например, «Третий элемент», и вы нажмете вкладку «Кнопка 2», команда будет не исполняться на iOS. На Android будет показано сообщение.

Проблема возникает при заключении ItemDetailPage в NavigationPage. Но для реального приложения эта страница навигации необходима, чтобы служба навигации работала.

Исходный код, например, приложение на GitHub

    async void OnItemSelected(object sender, EventArgs args)
    {
        var layout = (BindableObject)sender;
        var item = (Item)layout.BindingContext;
        // Causes issue
        await Navigation.PushAsync(new NavigationPage(new ItemDetailPage(new ItemDetailViewModel(item))));
        // No issue
        // await Navigation.PushAsync(new ItemDetailPage(new ItemDetailViewModel(item)));
    }

1 Ответ

0 голосов
/ 17 июня 2020

Поскольку вы установили ItemsPage как страницу навигации, нет необходимости снова устанавливать ItemDetailPage как страницу навигации. И если вы это сделаете, на странице будет две панели навигации.

 <NavigationPage Title="Browse">
            <NavigationPage.Icon>
                <OnPlatform x:TypeArguments="FileImageSource">
                    <On Platform="iOS" Value="tab_feed.png"/>
                </OnPlatform>
            </NavigationPage.Icon>
            <x:Arguments>
                <views:ItemsPage />
            </x:Arguments>
        </NavigationPage>

И в вашем случае проблема вызвана макетом. Когда на странице есть две панели навигации в iOS, рамка второй кнопки выйдет за пределы экрана. Таким образом, команда никогда не будет вызвана, даже если она обычно отображается на экране. Если вы удалите четвертую строку и ListView, вторая кнопка снова станет активной.

Лучшее решение (или правильное решение) - это именно то, что вы сделали.

...