选择项目时,xamarinForms ListView ItemTapped和ItemSelected一起运行

时间:2018-04-01 07:38:56

标签: listview xamarin.forms xamarin.forms.listview

我有一个带有两个事件“ListTapped”和“ItemSelected”的ListView,当用户选择项目时,应该出现一个警告“你选择的项目”,当用户点击该项目时,警告“你点击的项目”应该是出现。 但是当用户选择一个项目时,首先出现“你点击的项目”的警报,然后出现“你选择的项目”的警告,为什么会发生这种情况?

这是我的Xaml文件

 <ListView x:Name="listView" 
              ItemTapped="Tapped"
              ItemSelected="Select">
        <ListView.ItemTemplate>
            <DataTemplate>
                <TextCell Text="{Binding Name}" Detail="{Binding Status}"/>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

代码behinde

 void Select(object sender, Xamarin.Forms.SelectedItemChangedEventArgs e)
    {
        var contact = e.SelectedItem as Contact;
        DisplayAlert("selected", "You selected item", "Ok");

        // listView.SelectedItem = null;
    }


    void Tapped(object sender, Xamarin.Forms.ItemTappedEventArgs e)
    {
        var contact = e.Item as Contact;
        DisplayAlert("tapped", "You tapped item", "Ok");
    }

4 个答案:

答案 0 :(得分:1)

点击项目时会触发ItemTapped事件。

当您选择项目时,会触发ItemSelected事件。当您点击当前未选中的项目时,您可以选择一个项目。

在这种情况下,如果您点击未选中的项目,则会触发ItemTappedItemSelected事件。

答案 1 :(得分:1)

可以采用一种解决方法来管理这两个事件, 您可以在列表项目的双击上调用Listview ItemTapped事件。 &安培;默认列表视图单击可以获得ItemSelected事件。

注意:这只是同时管理两者的解决方法。

答案 2 :(得分:1)

另一个简单的解决方法是计算Tapped事件被触发的次数。正如我所知,Tapped事件总是在Selected事件之前触发,因此只需定义一个整数,在每个Tapped事件中增加它,然后在Selected事件中重置。

private int _myListTapNumber = 0;

...
private void MyList_ItemTapped(object sender, ItemTappedEventArgs e)
{
    if (_myListTapNumber > 1)
    {
        DisplayAlert("Tapped", "Tap event fired.", "OK");
    }
    _myListTapNumber++;
}

private void MyList_ItemSelected(object sender, SelectedItemChangedEventArgs e)
{
    _myListTapNumber = 1;

    DisplayAlert("Selected", "Selected event fired.", "OK");
}

答案 3 :(得分:-1)

private bool selectionFixed = false;
void Select(object sender, SelectedItemChangedEventArgs e)
{
    selectionFixed = false;
}

void Tapped(object sender, ItemTappedEventArgs e)
{
    if (selectionFixed)
        DisplayAlert("Choice", "Your Choice: " + e.Item, "Ok");
    else
        selectionFixed = true;
}