將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來實現這個問題。謝謝 –