Picker给了我一个ArgumentOutOfRangeException,为什么会发生这种情况?

时间:2017-06-06 14:23:51

标签: c# xamarin.forms picker

如果授权== 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,对吗?

1 个答案:

答案 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;
}