Я пытаюсь получить значение 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>