Почему я получаю событие двойного щелчка вместо одного в списке UWP? - PullRequest
1 голос
/ 19 апреля 2019

У меня есть список с некоторыми элементами.на моей странице Page.XAML есть что-то вроде:

<ListBox SelectionMode="Single" SelectionChanged="SelectedIndexChanged" x:Name="myList" HorizontalAlignment="Center" Margin="0,0,0,0" Width="350" Height="900" BorderThickness="0,0,0,0" RequestedTheme="Default" VerticalAlignment="Top" FontSize="20" IsDoubleTapEnabled="False" IsHoldingEnabled="False" IsRightTapEnabled="False" Background="Transparent">

Я создал событие SelectedIndexChanged, чтобы проверять, когда я нажимаю на один элемент списка:

Page.XAML.cs

 private async void SelectedIndexChanged(object sender, SelectionChangedEventArgs e)
    {
        int itemIndex = myList.SelectedIndex;

        var messageDialog = new MessageDialog("What do you want to do?", "Alert!");
        messageDialog.Commands.Add(new UICommand("Do It", null));
        messageDialog.Commands.Add(new UICommand("Don't do it", null));
        messageDialog.Commands.Add(new UICommand("Cancel", null));
        var cmdClick = await messageDialog.ShowAsync();
        Debug.WriteLine(itemIndex);
        if (cmdClick.Label == "Do It")
        {
            Debug.WriteLine("Do It");
            myList.Items.RemoveAt(itemIndex);
            return;
        }
        if (cmdClick.Label == "Don't do it")
        {
            Debug.WriteLine("No defect");
            myList.Items.RemoveAt(itemIndex);
            return;
        }
        if (cmdClick.Label == "Cancel")
        {
            Debug.WriteLine("Cancel");
            return;
        }
    }

Кажется, все правильно, но когда я нажимаю на одну кнопку диалогового окна (после выбора одного элемента списка), диалоговое окно снова появляется в общей сложности два раза вместо простого возвратак главному окну.

Есть ли что-то, чего мне не хватает?

Спасибо

1 Ответ

1 голос
/ 19 апреля 2019

Как отметил Джан Паоло в комментарии, 2-е событие происходит, так как вы удаляете выбранный элемент из списка.

Когда вы удаляете выбранный элемент, SelectedIndex к значению по умолчанию, которое составляет -1 . Таким образом, если пользователь выбрал элемент с индексом X , после удаления элемента он меняется на -1 , следовательно, он запускает событие SelectedIndexChanged.

-1 SelectedIndex означает, что в данный момент в списке нет выбранного элемента.


Таким образом, самый простой способ решить эту проблему - просто добавить проверку, чтобы увидеть, равен ли выбранный индекс -1 или нет.

 private async void SelectedIndexChanged(object sender, SelectionChangedEventArgs e)
    {
        int itemIndex = myList.SelectedIndex;
        //checking if the selected index is -1 (or no item is actually selected)
        if (itemIndex != -1)
        {
            var messageDialog = new MessageDialog("What do you want to do?", "Alert!");
            messageDialog.Commands.Add(new UICommand("Do It", null));
            messageDialog.Commands.Add(new UICommand("Don't do it", null));
            messageDialog.Commands.Add(new UICommand("Cancel", null));
            var cmdClick = await messageDialog.ShowAsync();
            Debug.WriteLine(itemIndex);
            if (cmdClick.Label == "Do It")
            {
                Debug.WriteLine("Do It");
                myList.Items.RemoveAt(itemIndex);
                return;
            }
            if (cmdClick.Label == "Don't do it")
            {
                Debug.WriteLine("No defect");
                myList.Items.RemoveAt(itemIndex);
                return;
            }
            if (cmdClick.Label == "Cancel")
            {
                Debug.WriteLine("Cancel");
                return;
            }
        }

    }

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...