将GestureRecognizer
添加到ViewCell
是一个很大的禁忌。在ListView或TableView中存在一个ViewCell
,它们拥有足够多的自己的tapper选项。添加GestureRecognizer
可能会让操作系统感到困惑,因为它应该处理哪个点击。
您的GestureRecognizer
选项基本上是以下3个,但是我建议对他们在这样一个场景,你有一个ListView
/TableView
。
看看我在下面提到的一些基于ListView/ViewCell的替代方案。
1 GestureRecognizer - 加入它代码
var tapGestureRecognizer = new TapGestureRecognizer();
tapGestureRecognizer.Tapped += (s, e) => {
// handle the tap
};
myGrid.GestureRecognizers.Add(tapGestureRecognizer);
2. GestureRecognizer - 使用命令
当您使用MVVM你也可以使用一个命令在C#结合:
var tapGestureRecognizer = new TapGestureRecognizer();
tapGestureRecognizer.SetBinding (TapGestureRecognizer.CommandProperty, "TapCommand");
myGrid.GestureRecognizers.Add(tapGestureRecognizer);
然后可以在XAML绑定:
<Grid>
<Grid.GestureRecognizers>
<TapGestureRecognizer Command="{Binding TapCommand}" />
</Grid.GestureRecognizers>
</Grid>
3 GestureRecognizer - 它添加在XAML为你做了
<Grid>
<Grid.GestureRecognizers>
<TapGestureRecognizer Command="{Binding OpenPickerCommand}" CommandParameter="{x:Reference coPicker}" NumberOfTapsRequired="1" />
</Grid.GestureRecognizers>
</Grid>
4. ViewCell - 螺纹事件
对于ViewCell
你有一个Tapped
事件:
<ViewCell Height="100" Tapped="OnTapped">
<ViewCell.View>
<StackLayout BackgroundColor="White" >
</StackLayout>
</ViewCell.View>
</ViewCell>
,你可以在后台代码实现:
void OnTapped (object sender, System.EventArgs e) { //your code}
5. ViewCell - 螺纹命令
当使用MVVM你不想把大量的业务逻辑在您的页面的代码隐藏。在这种情况下,您可以使用Behavior
将事件转换为命令。这方面的一个样本可以在这里找到:
https://github.com/xamarin/xamarin-forms-samples/tree/master/Behaviors/EventToCommandBehavior/EventToCommandBehavior
6。ListView - 商品已选
ListView
本身也有一个ItemSelected
事件。这可以以与代码隐藏事件或Behavior
中事件代理Command
事件相同的方式处理,如ViewCell
Tapped
事件。
7. ListView控件 - SelectedItem属性
可以绑定SelectedItem
一个属性在您的视图模型。在setter上,您可以执行自定义代码。
<ListView
ItemsSource="{Binding YourItems}"
SelectedItem="{Binding YourSelectedItem, Mode=TwoWay}" >
</ListView>
而在代码:
string _yourSelectedItem;
public string YourSelectedItem
{
get { return _yourSelectedItem; }
set {
_yourSelectedItem = value;
// Perform your custom functionality
}
}
谢谢您非常详细的解答。我很欣赏你对这些建议的所有努力。基于你的回答,我想可能对我来说最容易实现的就是使用Tapped事件。在我的情况下,我使用一个选择器,因此我现在会开放一个新的问题,因为我不太确定如何使用onTapped来实现这个问题。谢谢 –