我刚开始使用Xamarin,同时学习C#和XAML,所以这是一次很好的学习经验。我试图完成一个看起来很简单的任务(清除选择器的选择),但结果却变得非常具有挑战性。
期望功能:一个带有选择器的页面,在该页面上进行选择并将其保存到一个变量中,在移动到其他页面后清除所做的选择,这样当返回到第一个页面时就没有所选内容。
我尝试使用picker.Items.Clear()和将SelectedIndex设置为-1,但我始终得到“OutOfRange异常”。我尝试过此文章,但无法使任何选项正常工作:如何在Xamarin Forms中清除选择器?
我不想把选择器设置为第一个选项,而是想让它为空,这样就可以显示选择器标题,这就是它第一次运行时的工作方式,但是当我进行选择并移动到下一页时,当我回来时,我的最初选择仍然存在。
希望上述都能理解我想要实现的内容。以下是我的基本代码,任何帮助或方向都将不胜感激。
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());
}
-=
和+=
如何工作 当您将.SelectedItem
设置为新值时,它的索引更改事件会触发,因此通过删除处理程序,您可以避免在将其设置为 null 时第二次调用它。关于页面问题,您是否只调用了.PushAsync(new Page1());
一次? - SushiHangover.PushAsync(new Page1());
,但似乎当我将其设置为null时,更改事件再次触发,从而再次调用推送。我添加了一个检查null的条件来确定何时移动到Page1,这似乎解决了问题。 - Mr.T