首页 > 解决方案 > xamarin 形成清晰的选择器选择

问题描述

我是 Xamarin 以及 c# 和 xaml 的新手,所以这是一次很好的学习经历。我正在尝试做我认为是一项简单的任务(清除选择器选择),但事实证明它已成为一项挑战。

所需功能:带有选择器选择的页面,进行选择,将选择保存到变量中,移动到不同的页面,然后清除所做的选择,因此当返回到第一页时不会进行选择。

我尝试使用picker.Items.Clear() 并设置SelectedIndex = -1,但我一直得到OutOfRangeException。我尝试了这篇文章,但没有任何选项起作用: 如果在 xamarin 表单中选择了它,如何清除选择器?

我不想将选择器设置为第一个选项,我希望它为空,以便显示选择器标题,这是它首次运行时的工作方式,但是当我进行选择并移至下一页时,当我回去吧,我最初的选择还在。

希望这一切都是有意义的,我正在努力实现。以下是我的基本代码,任何帮助或指导将不胜感激。

MainPage.xaml:

<StackLayout>
        <Label Text="Select an option:" 
            VerticalOptions="Start" 
            HorizontalOptions="Start" 
        />

        <Picker x:Name="OptionSelect"
            Title="Click to Select"
            SelectedIndexChanged="OptionSelect_OnSelectedIndexChanged"
        />      
</StackLayout>

MainPage.xaml.cs:

    public MainPage()
    {
        InitializeComponent();

        OptionSelect.Items.Add("Option 1");
        OptionSelect.Items.Add("Option 2");
        OptionSelect.Items.Add("Option 3");
    }

    public void OptionSelect_OnSelectedIndexChanged(object sender, EventArgs e)
    {
        var option = OptionSelect.Items[OptionSelect.SelectedIndex];

        //OptionSelect.Items.Clear();
        //OptionSelect.Items.Add("Option 1");
        //OptionSelect.Items.Add("Option 2");
        //OptionSelect.Items.Add("Option 3");

        //OptionSelect.SelectedIndex = -1;

        Navigation.PushAsync(new Page1());
    }

标签: c#xamlxamarin

解决方案


清除选择器选择?

将实例SelectedItem上的属性设置为。Pickernull

OnSelectedIndexChanged因此,使用您的代码示例并在分配事件时防止重新触发事件null

public void OptionSelect_OnSelectedIndexChanged(object sender, EventArgs e)
{
    var option = OptionSelect.SelectedItem;
    // Prevent setting the SelectedItem from refiring event
    OptionSelect.SelectedIndexChanged -= OptionSelect_OnSelectedIndexChanged;
    OptionSelect.SelectedItem = null;
    OptionSelect.SelectedIndexChanged += OptionSelect_OnSelectedIndexChanged;
    // Do something with option object
}

推荐阅读