Sam*_*tar 0 xamarin xamarin.forms
我有这个代码:
<ViewCell x:Name="co">
<Grid VerticalOptions="CenterAndExpand" Padding="20, 0">
<Grid.GestureRecognizers>
<TapGestureRecognizer Command="{Binding OpenPickerCommand}" CommandParameter="{x:Reference coPicker}" NumberOfTapsRequired="1" />
</Grid.GestureRecognizers>
<Picker x:Name="coPicker" IsVisible="false" HorizontalOptions="End" SelectedIndexChanged="coPickerSelectedIndexChanged" ItemsSource="{Binding Order}"></Picker>
<Label x:Name="coLabel" HorizontalOptions="End"/>
</Grid>
</ViewCell>
Run Code Online (Sandbox Code Playgroud)
有没有办法在C#中将命令连接到单元格的敲击而不是必须使用XAML <Grid.GestureRecognizers>?
添加GestureRecognizer到a ViewCell是一个很大的禁忌.一个ViewCell一个ListView或TableView中有自己的够多了窃听选项中存在.添加一个GestureRecognizer可能会混淆操作系统应该处理哪个点击.
你的选择GestureRecognizer基本上是以下3,但我建议在你有ListView/ 的情况下反对他们TableView.
查看我在下面提到的一些基于ListView/ViewCell的替代方案.
1. GestureRecognizer - 在代码中添加它
var tapGestureRecognizer = new TapGestureRecognizer();
tapGestureRecognizer.Tapped += (s, e) => {
// handle the tap
};
myGrid.GestureRecognizers.Add(tapGestureRecognizer);
Run Code Online (Sandbox Code Playgroud)
2. GestureRecognizer - 使用命令
使用MVVM时,您还可以在C#中使用命令绑定:
var tapGestureRecognizer = new TapGestureRecognizer();
tapGestureRecognizer.SetBinding (TapGestureRecognizer.CommandProperty, "TapCommand");
myGrid.GestureRecognizers.Add(tapGestureRecognizer);
Run Code Online (Sandbox Code Playgroud)
然后可以绑定在XAML中:
<Grid>
<Grid.GestureRecognizers>
<TapGestureRecognizer Command="{Binding TapCommand}" />
</Grid.GestureRecognizers>
</Grid>
Run Code Online (Sandbox Code Playgroud)
3. GestureRecognizer - 像你一样在XAML中添加它
<Grid>
<Grid.GestureRecognizers>
<TapGestureRecognizer Command="{Binding OpenPickerCommand}" CommandParameter="{x:Reference coPicker}" NumberOfTapsRequired="1" />
</Grid.GestureRecognizers>
</Grid>
Run Code Online (Sandbox Code Playgroud)
4. ViewCell - Tapped事件
因为ViewCell你有一个Tapped事件:
<ViewCell Height="100" Tapped="OnTapped">
<ViewCell.View>
<StackLayout BackgroundColor="White" >
</StackLayout>
</ViewCell.View>
</ViewCell>
Run Code Online (Sandbox Code Playgroud)
您可以在代码隐藏中实现:
void OnTapped (object sender, System.EventArgs e) { //your code}
Run Code Online (Sandbox Code Playgroud)
5. ViewCell - Tapped命令
使用MVVM时,您不希望在页面代码隐藏中加入大量业务逻辑.在这种情况下,您可以使用a Behavior将事件转换为命令.可以在这里找到一个样本:
6. ListView - ItemSelected
ListView本身也有一个ItemSelected事件.这可以通过ViewCell Tapped与代码隐藏中的事件或将Behavior其委托给a 的事件相同的方式处理Command.
7. ListView - SelectedItem属性
您可以将SelectedItem视图模型中的属性绑定到该属性.在setter上,您可以执行自定义代码.
<ListView
ItemsSource="{Binding YourItems}"
SelectedItem="{Binding YourSelectedItem, Mode=TwoWay}" >
</ListView>
Run Code Online (Sandbox Code Playgroud)
在代码中:
string _yourSelectedItem;
public string YourSelectedItem
{
get { return _yourSelectedItem; }
set {
_yourSelectedItem = value;
// Perform your custom functionality
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
647 次 |
| 最近记录: |