如果授权== true,我需要我的选择器隐藏元素。
private async void Picker_Unfocused(object sender, FocusEventArgs e)
{
try
{
await DisplayAlert("try", picker.SelectedIndex.ToString(), "OK");
if (response.domains[picker.SelectedIndex].authorization == true)
{
userNameEntry.IsVisible = false;
passwordEntry.IsVisible = false;
userLabel.IsVisible = false;
}
else
{
userNameEntry.IsVisible = true;
passwordEntry.IsVisible = true;
userLabel.IsVisible = true;
}
}
catch(System.ArgumentOutOfRangeException)
{
await DisplayAlert("catch", picker.SelectedIndex.ToString(), "OK");
}
}
这无济于事。我得到一个ArgumentOutOfRangeException。有谁知道为什么?对我来说这很有用。
编辑:代码现在是当前代码。如果我选择第一项,displayalerts只给我0,如果我选择第二项,则给我1,等等。我仍然不知道发生了什么。如果SelectedIndex
的值为0(或我选择的任何值),我不应该得到ArgumentOutOfRangeException,对吗?
答案 0 :(得分:1)
当选择器尚未初始化或者可以查看空值并因此为空时,SelectedIndex
属性将为您提供值-1
。该值无法在数组中使用。
您应该丰富您的代码以考虑这种可能性,例如:
if (picker.SelectedIndex > -1 && response.domains[picker.SelectedIndex].authorization == true)
{
userNameEntry.IsVisible = false;
passwordEntry.IsVisible = false;
userLabel.IsVisible = false;
}
else
{
userNameEntry.IsVisible = true;
passwordEntry.IsVisible = true;
userLabel.IsVisible = true;
}