Я не могу получить значение Picker SelectedItem на другой странице - PullRequest
0 голосов
/ 14 февраля 2020

Я пытаюсь получить значение SelectedItem средства выбора для использования на другой странице, но, похоже, оно не работает. Я нашел здесь «решение»: Xamarin Picker выбрал элемент, сохраняющийся на нескольких страницах , но он не хочет работать на меня. Когда я пытаюсь использовать его, скажем, на этикетке, я не могу заставить его отображаться. Я могу вручную установить строку, но не использовать строку самого выбранного элемента. Я создал класс stati c в соответствии с указаниями:

public static class PickerPersist
{
    public static string pickerSelectedItem = "test";
}

и включил xmlns:local="clr-namespace:C971" и привязку метки к Text="{Binding x:static local:PickerPersist.PickerSelectedItem}", и она правильно показывает «тест» при отображении метки. Мой вопрос, как мне получить строку фактического SelectedItem для отображения? Сам инструмент выбора находится на другой странице, и я смог заставить его правильно отображаться с помощью var pickerItem = (Terms)termpicker.SelectedItem; Я попытался установить PickerSelectedItem на Page1.termPicker.SelectedItem;, но он возвращается с ошибкой "Page1.termPicker недоступен из-за его защиты уровень». Мне удалось избавиться от ошибки, установив public static string Picked; на предыдущем классе страницы, а затем установив переменную pickerItem в Picked. Однако, это, кажется, не переносится на новую страницу. Если после установки pickeritem на Picked поставить разрыв, то все показывает, что он действительно установлен правильно, но в PickerPersist он отображается как ноль и, следовательно, не отображается на новой странице.

Надеюсь все это имеет смысл. Любая помощь, которую вы можете предложить, была бы великолепна! Спасибо! Полный код доступен здесь: https://github.com/yax51/C971.git

Xaml, где живет сборщик:

ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:d="http://xamarin.com/schemas/2014/forms/design"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             mc:Ignorable="d"
             xmlns:local="clr-namespace:C971"
             x:Class="C971.Page1"
             Title="Term Selector">


    <ContentPage.Content>
        <StackLayout>

            <Picker x:Name="termPicker" 
                    ItemsSource="{Binding Terms}"
                    ItemDisplayBinding="{Binding TermName}"
                    Title="Select a term"
                    IsEnabled="True"
                    SelectedItem="{x:Static local:PickerPersist.PickerSelectedItem}"/>

Xaml.cs


    [XamlCompilation(XamlCompilationOptions.Compile)]
    public partial class Page1 : ContentPage
    {
        public static String Picked;
        public Page1()
        {
            InitializeComponent();

        }
    ...

        void TermGoClicked(object sender, EventArgs e)
        {
            var pickerItem = (Terms)termPicker.SelectedItem;


            if (pickerItem == null)
            {
                DisplayAlert("Error", "Please Select a term", "Ok");
            }
            else
            {
                Picked = pickerItem.TermName;

                Navigation.PushAsync(new TermPage());
            }



        }

Stati c класс

public static class PickerPersist
    {
        public static string PickerSelectedItem = Page1.Picked;
    }

Ярлык на новой странице

    <ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:d="http://xamarin.com/schemas/2014/forms/design"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             mc:Ignorable="d"
             xmlns:local="clr-namespace:C971"            
             x:Class="C971.TermPage">
    <ContentPage.Content>
        <StackLayout>
            <Label x:Name="test" Text="{x:Static local:PickerPersist.PickerSelectedItem}"/>
        </StackLayout>
    </ContentPage.Content>
</ContentPage>

1 Ответ

0 голосов
/ 15 февраля 2020

Использование приемника выбора SelectedIndexChange, создание модели представления, обновление свойства модели представления при изменении выбранного элемента и связывание текста с меткой со свойством модели представления. - @Muhammad Adeel Shoukat

Сделал это и должен был добавить ViewCell в ListView, и это сработало.

...