我有一个带有两个事件“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");
}
答案 0 :(得分:1)
点击项目时会触发ItemTapped
事件。
当您选择项目时,会触发ItemSelected
事件。当您点击当前未选中的项目时,您可以选择一个项目。
在这种情况下,如果您点击未选中的项目,则会触发ItemTapped
和ItemSelected
事件。
答案 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;
}